使用Sybase ASE 12.5我有以下情况。
当相乘时,存储在float cols中的2个值给出一个值。
将该值转换为varchar(或使用Java检索它)会给出浮点数近似的基础精确值。
我的问题是浮点数表示的值是正确的,但精确值导致问题(由于严格的舍入规则)。
例如
declare @a float,@b float
select @a = 4.047000, @b = 1033000.000000
select @a*@b as correct , str(@a*@b,40,20) as wrong
给出:
correct: 4180551.000000,
wrong: 4180550.9999999995343387
同样的时候 @a = 4.047000,@ b = 1 ......你得到了
correct: 4.047000,
wrong: 4.0469999999999997
(同样的事情发生在使用convert(varchar(30),@ a * @ b)和cast(@ a * @ b,varchar(30))
我很欣赏在Java中使用第一个示例很容易,但由于各种商业原因无法完成,无论如何它都不适用于第二个。
我也无法更改float table column数据类型。
无论如何将乘法乘积的浮点表示形式作为字符串或上面的实际“正确”值?
由于 克里斯