Home  >  Article  >  php教程  >  Due to the accuracy of PHP floating point calculations, the order amount is often less than 1 cent.

Due to the accuracy of PHP floating point calculations, the order amount is often less than 1 cent.

WBOY
WBOYOriginal
2016-09-05 08:45:421622browse

I encountered a strange problem recently. Orders paid through WeChat in the mall often cost one penny less. After troubleshooting, it was found to be caused by PHP floating point calculation precision issues

It is caused by the precision of PHP floating point number operations. Brother Niao’s Bolg has detailed instructions. http://www.laruence.com/2013/03/26/2884.html,
When decimals are expressed in binary, 0.58 is an infinite value in binary

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

Convert to floating point number (64-bit double precision)

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

Solution:

(int)((0.58*1000)/10) = 58   
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn