私はまだ正確な結果を得ることができません。最大値は何ですか?できるだけ正確に表示したい場合は、小数点以下を表示する必要がありますか?最大値は何ですか?浮動小数点数を表示する小数点以下の桁数(PHP)
いくつかのコード(コピー&ペーストしてテストする準備ができて):
// Test with 5 decimals
$a = 0.00001;
echo bcadd($a,$a,5) . '<br/>';
echo bcadd($a,$a,6) . '<br/>';
echo number_format(bcadd($a,$a,5),5) . '<br/>';
echo number_format(bcadd($a,$a,5),6) . '<br/>';
echo bcadd(0.00001,0.00001,20) . '<br/>';
echo number_format(bcadd($a,$a,20),5) . '<br/>';
echo number_format(bcadd($a,$a,20),21) . '<br/><br/>';
/* Output:
0.00000
0.000000
0.00000
0.000000
0.00000000000000000000
0.00000
0.000000000000000000000
*/
// Test with 4 decimals
$a = 0.0001;
echo bcadd($a,$a,5) . '<br/>';
echo bcadd($a,$a,6) . '<br/>';
echo number_format(bcadd($a,$a,5),5) . '<br/>';
echo number_format(bcadd($a,$a,5),6) . '<br/>';
echo bcadd(0.00001,0.00001,20) . '<br/>'; // wtf? this outputs 0 too?
echo number_format(bcadd($a,$a,20),5) . '<br/>';
echo number_format(bcadd($a,$a,20),21) . '<br/>';
/* Output:
0.00020
0.000200
0.00020
0.000200
0.00000000000000000000
0.00020
0.000200000000000000010
*/
私は答えは4であることを推測すべき?しかし、私はまだコメントの行に問題がある
編集:私は誰も私のテストを理解したとは思わない。私はフロートが不正確であることを知っています。しかし1つは1!= 0.98990123で、他のものは1!= 0.0000です。 bc *関数の精度として4を設定すると、0.0000ではなく、0.9899以上(完全な答えが1の場合)になると予想されます。 1つは「無限精度では完全に正確ではありません」、もう1つは「まったく役に立たない」です。
編集2:@Michael Borgwardtは最大でどのような解決策
は、あなたが必要とする限り、私は実際には問題が何であるかを理解していません。浮動小数点数は、バイナリに変換されるため正確ではありません。 –
あなたのコメント行は5小数点以下を使用します。 – vakio