float.valueof()自動截取有效位數


最近在項目上遇到一個新奇的問題與大家分享一下,情況如下:

頁面新增一個777777777數傳到后台,保存之后變成777777790;

查到原因是后台用float.valueof()轉換了一下;

繼續深挖,float基本屬性如下: 

    基本類型:float 二進制位數:32

    包裝類:java.lang.Float

    最小值:Float.MIN_VALUE=1.4E-45

  最大值:Float.MAX_VALUE=3.4028235E38

這些都不是重點,重點是float是單精度;

float和double的范圍是由指數的位數來決定的。 

  float: 

  1bit(符號位) 

  8bits(指數位) 

  23bits(尾數位) 

在數學中,特別是在計算機相關的數字(浮點數)問題的表述中,有一個基本表達法

(浮點)數值 =      尾數    ×    底數 ^ 指數,(附加正負號)

 

float:2^23 = 8388608,一共七位,這意味着最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字; 

通俗點就是: 777777777   ——》  7.7777779E8    ——》777777790

所以在進行大尾數計算建議用Double.valueOf();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM