Perl/mysql浮点不精确



我正在使用Perl与mysql数据库通信浮点数。我在perl中执行乘法运算:

 $var = 0.001 * 3;

然后将该值存储在mysql数据库的DOUBLE类型列中。稍后检索结果,对数字执行进一步的乘法和加法,并将其存储回数据库

$previous_result_from_db += 0.001*1 + 0.001*0.5.

存储在数据库中的结果应该是0.0045,但我得到的却是:0.0045000000000000005。我想知道不精确的根源在哪里。是Perl还是数据库?处理这种浮点交互以避免不精确的正确方法是什么?

谢谢!

"10.0乘以0.1几乎不等于1.0"——Brian Kernighan, The Elements of Programming Style

FLOAT和DOUBLE的一个已知限制是它们是不精确的数字数据类型。这是内置在IEEE 754格式的设计中。它影响所有使用这种格式存储浮点数的编程语言。

B.5.5.8浮点值的问题。

PHP在Warning: Floating point precision.

如果您想在MySQL中使用缩放后的数字数据类型来避免这种舍入行为,请使用DECIMAL。

最新更新