Home > php教程 > 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
Release: 2016-09-05 08:45:42
Original
1644 people have browsed it

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
Copy after login

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

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

Solution:

(int)((0.58*1000)/10) = 58   
Copy after login
source:php.cn
Statement of this Website
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
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template