> 类库下载 > PHP类库 > PHP 부동 소수점 연산의 정확성으로 인해 주문 금액이 결제 시 1포인트 미만인 경우가 많습니다.

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

高洛峰
풀어 주다: 2016-10-10 11:24:15
원래의
1402명이 탐색했습니다.

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

최근 쇼핑몰에서 WeChat을 통해 결제한 주문이 종종 1이 되는 이상한 문제가 발생했습니다. cent less. 조사 결과, 점 연산 정밀도의 문제

는 Niao 형제의 Bolg가 자세히 설명했습니다. http://www.laruence.com/2013/03/26/2884.html,
십진수를 이진수로 표현하면 0.58은 이진수로 무한한 값이 됩니다.

0.58的二进制表示基本上(52位)是: 0010100011110101110000101000111101011100001010001111
0.57的二进制表示基本上(52位)是: 0010001111010111000010100011110101110000101000111101
로그인 후 복사

float로 변환합니다. 포인트(64비트 배정밀도)

0.58 -> 0.57999999999999996
0.57 -> 0.56999999999999995
로그인 후 복사
0.58*100 = 57.999999999 
(int)(0.58*100) = 57
로그인 후 복사

해결책:

(int)((0.58*1000)/10) = 58
로그인 후 복사

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿