我有一个数据库列,其中包含(由于某些原因在中间丢失)浮点值。
所以,有人用一些小值填充数据库表,比如0.00025,当我运行报表时,实际上我会回到0.000249999999 ....或者某些,因为无法表示输入的值。
有没有可靠的方法来获取浮点值并转换回最初输入的值?
数据库是Sybase。
答案 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)或任何适当的解决方案。