我们需要将十进制数(单位价格)存储在数据库表中。问题是,我们需要存储和显示终端用户作为用户输入的小数位数。小数位数的最大值为6位。例如:
例如,首先,小数点(10,6)似乎总是存储最大小数(6)。
货币储存了不同数量的小数(2-4),但不超过4(还有其他一些问题,为什么我们不想使用它)。
我们知道格式化应该总是在使用数据的客户机上进行,但是如果我们能够查询数据,以便查询结果自动具有正确的小数,那就太好了。
我们准备添加另一列,该列存储用户给出的十进制位数,然后使用该列格式化数据以供显示,但这听起来有点复杂。
如果我们添加另一列,是否可以使用该列直接格式化查询中的十进制值?
发布于 2020-02-26 10:44:30
我能想到两种想法:
decimal(19,6)中- Store the number of decimals in another field, i.e. `3`
- Use a calculated column to render the format, i.e. `FORMAT()`
不过,你需要反向设计小数。
这更复杂,但至少可以将数字存储在数字字段中,并让SSMS呈现所需的内容。
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发布于 2020-02-25 07:13:43
根据存储定律,我们可以使用十进制:
十进制(1,9)存储字节为5 十进制(10,19)存储字节为9 十进制(20,28)存储字节为13 十进制(29,38)存储字节为17
关于钱:如果你有敏感的生意,不要用钱。钱不需要拯救我们。
例如:我们给整个发票打折扣。如果我们想为将来的行除以这个值,那么很可能会创建第三个小数位。如果使用Mani,则应该截断该值,这将导致一个Trending错误。
使用小数可以减少误差系数。
您可以在DocMicrosoft中了解十进制
https://stackoverflow.com/questions/60388977
复制相似问题