舍入将DB中的浮点值返回到“正确”值

时间:2011-03-10 14:18:37

标签: sql floating-point sybase

我有一个数据库列,其中包含(由于某些原因在中间丢失)浮点值。

所以,有人用一些小值填充数据库表,比如0.00025,当我运行报表时,实际上我会回到0.000249999999 ....或者某些,因为无法表示输入的值。

有没有可靠的方法来获取浮点值并转换回最初输入的值?

数据库是Sybase。

3 个答案:

答案 0 :(得分:2)

  

有没有可靠的方法来接受   浮动值并转换回什么   最初进入?

没有。大概是,嗯,船载的实际值可能映射到单个浮点值。 db将最接近的FP近似值存储到原始条目中;在一般情况下,存在无限多个实数值,其中0.000249999999 ...是最接近的FP近似值。

同样,在一般情况下,您无法安全地对条目的长度做出假设。也就是说,你不能通过查看0.000249999999来确定用户是否在应用程序中键入了该用户是否输入了.00025,dba是否将该列更新为计算结果(在这种情况下为“原始”) “值可能小于0.0002499999etc)等等。

但是,如果您知道要在小数点右侧看到多少位数,则可以使用Sybase的ROUND()函数。

答案 1 :(得分:0)

不,这是浮点数的行为(你牺牲了容量或效率的准确性)。虽然您可以使用舍入来实现近似值,但如果您需要精确存储到特定精度级别,则应使用decimal

答案 2 :(得分:0)

那将是0.0002498626708984375 ....

这归结为“了解您的数据”。你怎么知道正确的值不是0.0002498626708984375?可能是因为你知道最初指定的小数位数。

使用该知识来解决问题,通过强制转换为NUMERIC(8,5)或任何适当的解决方案。