0

使用 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 中仅围绕第一个示例很容易,但由于各种业务原因无法完成,并且无论如何它不适用于第二个示例。

我也无法更改浮点表列数据类型。

无论如何,是否可以将乘积的浮点表示形式作为字符串或上面的实际“正确”值?

谢谢克里斯

4

0 回答 0