首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储具有不同小数位数的十进制数的最佳方法

存储具有不同小数位数的十进制数的最佳方法
EN

Stack Overflow用户
提问于 2020-02-25 06:53:04
回答 2查看 1.3K关注 0票数 0

我们需要将十进制数(单位价格)存储在数据库表中。问题是,我们需要存储和显示终端用户作为用户输入的小数位数。小数位数的最大值为6位。例如:

  • 1.00
  • 9.9999
  • 0.123456

例如,首先,小数点(10,6)似乎总是存储最大小数(6)。

货币储存了不同数量的小数(2-4),但不超过4(还有其他一些问题,为什么我们不想使用它)。

我们知道格式化应该总是在使用数据的客户机上进行,但是如果我们能够查询数据,以便查询结果自动具有正确的小数,那就太好了。

我们准备添加另一列,该列存储用户给出的十进制位数,然后使用该列格式化数据以供显示,但这听起来有点复杂。

如果我们添加另一列,是否可以使用该列直接格式化查询中的十进制值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-26 10:44:30

我能想到两种想法:

  1. 正如您已经提到的,将其存储在文本中
  2. 将其存储在decimal(19,6)
代码语言:javascript
复制
- Store the number of decimals in another field, i.e. `3`
- Use a calculated column to render the format, i.e. `FORMAT()`

不过,你需要反向设计小数。

这更复杂,但至少可以将数字存储在数字字段中,并让SSMS呈现所需的内容。

代码语言:javascript
复制
CREATE TABLE MyTable (
NumericValue DECIMAL(19,6) NOT NULL,
Decimals TINYINT NOT NULL,
Formatted AS (FORMAT(NumericValue,'#.' + LEFT('00000000',Decimals))) 
)

INSERT INTO MyTable (NumericValue, Decimals)
SELECT 10.2,3 UNION ALL
SELECT 1.2,1 UNION ALL
SELECT 1,3

SELECT * FROM MyTable
票数 0
EN

Stack Overflow用户

发布于 2020-02-25 07:13:43

根据存储定律,我们可以使用十进制:

十进制(1,9)存储字节为5 十进制(10,19)存储字节为9 十进制(20,28)存储字节为13 十进制(29,38)存储字节为17

关于钱:如果你有敏感的生意,不要用钱。钱不需要拯救我们。

例如:我们给整个发票打折扣。如果我们想为将来的行除以这个值,那么很可能会创建第三个小数位。如果使用Mani,则应该截断该值,这将导致一个Trending错误。

使用小数可以减少误差系数。

您可以在DocMicrosoft中了解十进制

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60388977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档