返回乘以的2个浮点数的浮点表示(不是精确值)

时间:2013-01-10 16:39:42

标签: sybase-ase

使用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数据类型。

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

由于 克里斯

0 个答案:

没有答案