Gre*_*egM 4 sql sql-server currency rounding
我想在sql中做一个回合,但结果很奇怪; 这是我做的:
我正在使用Mssql
我有一个选择:
Select num1, num2, num1 * num2, round(num1 * num2, 2)
from myTable
Run Code Online (Sandbox Code Playgroud)
数据类型 :
num1是一个浮点数
num2是一笔钱
如果num1的值是15并且num2的值是0.033这是我的结果集:
15,0.033,0.495,0.5
问题是我有这些价值观:
如果num1的值是5并且num2的值是0.045这是我的结果集:
5,0.045,0.225,0.22
有人有想法吗?
如果您在网格视图模式下查看此可运行示例(请注意文本模式不同),您应该看到问题:
DECLARE @tbl AS TABLE (num1 float, num2 money);
INSERT INTO @tbl VALUES (15, 0.033), (5, 0.045);
Select num1, num2, num1 * num2, round(num1 * num2, 2)
from @tbl;
Run Code Online (Sandbox Code Playgroud)
请注意,该数字实际上是.224999999,它向下舍入到.22 - 在查看SQL Server的非二进制输出时需要小心 - 它有时会以您不期望的方式将数字转换为文本.
这来自浮动*货币操作导致浮动,其受到二元表示问题的影响.
您应该考虑它对您的浮点值意味着什么,并考虑使用十进制代替,并查看小数运算的比例和精度规则.请注意,钱只与十进制有些相似(19,4)
归档时间: |
|
查看次数: |
3770 次 |
最近记录: |