我已阅读有关在 PHP 中使用浮点类型的浮点指南。答案是使用 BC Math 扩展。使用字符串可以将浮点数表示为精确类型并防止浮点数和整数问题。
同时,我在 Github 和这个网站上没有找到任何使用 BC 数学扩展的好例子。什么是强制 PHP 使用字符串的干净方法,如何评估它们?
特别是使用 MySQL DECIMAL 数据类型的 BC 数学扩展的最佳方法是什么?
我使用 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
?>