>  기사  >  php教程  >  PHP 부동 소수점 계산의 정확성으로 인해 주문 금액이 1센트 미만인 경우가 많습니다.

PHP 부동 소수점 계산의 정확성으로 인해 주문 금액이 1센트 미만인 경우가 많습니다.

WBOY
WBOY원래의
2016-09-05 08:45:421615검색

최근 쇼핑몰에서 WeChat을 통해 결제한 주문의 가격이 1페니 미만인 경우가 많았는데, 조사 결과 PHP 부동 소수점 계산 정확도 문제로 인해 발생하는 것으로 나타났습니다.

PHP 부동 소수점 연산의 정밀도로 인해 발생하는 문제입니다. Niao 형제의 Bolg에 자세한 지침이 있습니다. http://www.laruence.com/2013/03/26/2884.html,
십진수를 이진수로 표현하면 0.58은 이진수로 무한한 값이 됩니다.

0.58的二进制表示基本上(52位)是: 0010100011110101110000101000111101011100001010001111 
0.57的二进制表示基本上(52位)是: 0010001111010111000010100011110101110000101000111101

부동소수점 숫자로 변환(64비트 배정밀도)

0.58 -> 0.57999999999999996 
0.57 -> 0.56999999999999995
0.58*100 = 57.999999999<span style="color: #000000;"> 
(int)(</span>0.58*100) = 57 

해결책:

(int)((0.58*1000)/10) = 58   
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.