PHP での float 型の使用に関するFloating-Point ガイドを読みました。答えは、BC Math 拡張機能を使用することです。文字列を使用すると、float を正確な型として表すことができ、float と整数の問題を防ぐことができます。
一方、Github とこのサイトで BC math 拡張機能を使用している良い例は見つかりませんでした。PHPに文字列の使用を強制するクリーンな方法は何ですか?それらを評価する方法は?
特に、MySQL DECIMAL データ型で BC Math 拡張機能を使用する最良の方法は何ですか?
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
?>