因為工作需要,**處理的時候往往是兩位小數需要換算成分,如:16.33元換算為1633分,直接乘以100也就行了的,但是又使用了乙個轉換為整數型別的函式intval()
這下子結果就不對了,如圖:
結果:
可以看出原本結果應該是1633的,但是使用了函式intval()
之後結果居然變為了1632了,這是由於浮點型別的數字不能在不丟失一點兒精度的情況下通過內部二進位制轉換得到結果的,換句話說就是浮點型別的計算都會丟失精度的。
該函式的解決方法手冊上也給出了,就是需要先使用strval()
函式將變數轉成字串型別,使用情況及結果如下:
還有就是直接使用型別轉換也是不行的,如:(int)($pay_price*100)
結果也會損失精度的。
如圖:
php 兩位小數
num 123.456 print r round num,2 num 123.454 print r round num,2 float round float val int precision round 對浮點數進行四捨五入 num 123.456 print r floor num 100...
保留兩位小數
1.只要求保留n位不四捨5入 float f 0.55555f int i int f 100 f float i 1.0 100 2.保留n位,四捨五入 decimal d decimal.round decimal.parse 0.55555 2 3.保留n位四捨五入 math.round 0....
保留兩位小數
num 10.4567 第一種 利用round 對浮點數進行四捨五入 echo round num,2 第二種 利用sprintf格式化字串 format num sprintf 2f num echo format num 第三種 利用千位分組來格式化數字的函式number format echo...