我正在尝试检索SQL Server中类型为double的字段值,然后将其转换为带有缩放因子13和14的十进制值。如果比例为13,则表示它给出了正确的结果。如果比例为14,则值会发生变化。
我使用以下查询及其各自的结果。
查询:
SELECT
CAST(discount AS DECIMAL(30,13)) as real_value,
discount
FROM pricetable
WHERE ref = '123'
结果:(十进制('123.9900000000000'),123.99)
查询:
SELECT
CAST(pricepaid AS DECIMAL(30, 14)) as real_value,
pricepaid
FROM pricetable
WHERE ref = '123'
结果:(十进制('115.84999999999999'),115.85)
为什么使用不同的缩放因子将双精度转换为十进制会产生不同的结果?请让我知道如何解决这个问题。
答案 0 :(得分:0)
双打总是近似值。 最好只使用DECIMAL。但你可以乘以10的幂,并且等等。
这是一个四舍五入的问题,在四舍五入中错误越多,数字越多。 0.11585x10³在基数2中理论上具有无限数量的数字。 10 ^ - (13 + 3)约为2 ^ -52,而double有52个尾数位,所以在14的范围内也达到物理极限。
但是请注意,显示为115.85的 double 在乘以大数时也会乘以近似误差,如115.85 * 1000 = 11584.9999