我阅读了有关在PHP中使用浮点类型的浮点数指南。答案是使用BC Math扩展。使用字符串可以将浮点数表示为精确类型,并防止浮点数和整数问题。
同时,我没有在Github上找到任何使用BC Math扩展的好例子,也没有在这个网站上找到。有什么干净的方法来强制PHP使用字符串,如何评估它们?
特别是,使用BC Math扩展与MySQL DECIMAL数据类型的最佳方式是什么?
我的测试示例使用PHP 5.4.10,正确答案为:0.2999999999996
同时,我没有在Github上找到任何使用BC Math扩展的好例子,也没有在这个网站上找到。有什么干净的方法来强制PHP使用字符串,如何评估它们?
特别是,使用BC Math扩展与MySQL DECIMAL数据类型的最佳方式是什么?
我的测试示例使用PHP 5.4.10,正确答案为:0.2999999999996
<?php
bcscale(13);
$a = '0.3';
$b = '0.0000000000004';
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.2999999999996
echo '<hr />';
$a = "0.3";
$b = "0.0000000000004";
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.2999999999996
echo '<hr />';
$a = 0.3;
$b = 0.0000000000004;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = '0.3';
$b = '0.0000000000004' + 0;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = (string) 0.3;
$b = (string) 0.0000000000004;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = strval(0.3);
$b = strval(0.0000000000004);
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
?>