java 浮点数精度_Java中浮点数精度问题
Java中浮點數(shù)精度問題
Java中的簡單浮點數(shù)類型float和double不能夠進行運算。不光是Java,在其它很多編程語言中也有這樣的問題。如下圖所示:
public class DataRange{
public static void main(String[] args) {
float number_1 = 0.04f + 0.06f; // 創(chuàng)建數(shù)據(jù)1
float number_2 = 0.1f; // 以同樣的值創(chuàng)建數(shù)據(jù)2
System.out.println(number_1==number_2); // 判斷兩個數(shù)據(jù)是否相等
System.out.println("number_1的值為" + number_1); // 輸出數(shù)據(jù)1的值
System.out.println("number_2的值為" + number_2); // 輸出數(shù)據(jù)2的值
}
}
以上代碼按常理理解應(yīng)該是number_1與number_2的值相同才對,但是看以下輸出并不是這樣:
可以看到兩者的值并不相等;因為浮點數(shù)在java中是不精確的,比如double d=2.01,你打印出來也是2.01,但是實際上java虛擬機存儲的是2.010000000001這個數(shù),java的浮點數(shù)不能存儲精確的小數(shù)點
所以我們應(yīng)該
最好完全避免使用浮點數(shù)進行比較
最好完全避免使用浮點數(shù)進行比較
當(dāng)然在java中也有解決此問題的方案:數(shù)學(xué)工具類?BigDecimal
總結(jié)
以上是生活随笔為你收集整理的java 浮点数精度_Java中浮点数精度问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 多线程数量_java多线程之计
- 下一篇: java set 取第一个_set集合取