여전히 정확한 결과를 얻을 수 없습니다. 최대치 란 무엇입니까? 가능한 한 정확하도록하려면 소수점 이하 자릿수를 표시해야합니까?최대 값은 무엇입니까? float에 대해 표시해야하는 십진수의 크기? (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! = 0.98990123이고 다른 것은 1! = 0.0000입니다. bc * 함수의 정밀도를 4로 설정하면, 0.0000이 아니라, 0.9899 이상이 될 것으로 예상됩니다 (완전한 대답이 1 인 경우). 한 가지는 '무한 정밀도에 대해서는 완벽하게 정확하지 않습니다'이고, 다른 것은 '완전히 쓸모가 없습니다'입니다.
편집 2 : @Michael Borgwardt은 최대 무엇 솔루션
는 당신이 필요로하는만큼, 정말 문제가 무엇인지 이해하지 않습니다. 플로트 숫자는 바이너리로 변환되기 때문에 절대로 정확하지 않습니다. –
주석 처리 된 행은 5 개의 소수를 사용합니다. – vakio