首先先說下計算機記憶體裡的儲存:
記憶體中最小的單位 位/位元(bit) 二進位制數序列中的一個0或一個1就是一個位元,在電腦中,一個位元對應著一個電晶體。
二進位制即常說的0和1兩個數碼來表示的數 基數為2,進位規則是 「逢二進一」
十進位制數則用0、1、2、3.........9 , 這十個數來表示。十進位制(計du數法)是以10為基礎數位系統,進位規則是 「滿十進一」
Java中基本資料型別:四類八種:
double float屬於浮點資料型別 然而在實際的開發中會發現有誤差
public class TestDemo {
public static void main(String args[]){
double a=2.9;
float f=2.4f;
System.out.print("計算結果:");
System.out.println(a-f);
}
}
計算的結果怎麼和預想的不一樣啊 (嗯。。。腦殼疼)
從計算機的儲存原理解釋浮點數為何會產生誤差:
都知道計算機內部是以二進位制進行儲存的,因此十進位制的有限位的小數在進來之後,會在計算機內部會顯示是一個無限位的小數。
Ps:十進位制2.9轉換為二進位制10.1110011001100..................1100無限迴圈
:
Ps:計算機儲存浮點數的精度有限,例如float可以保留十進位制最多7位(二進位制23位)有效數位,
double可以保留十進位制15-16位元(二進位制52位)有效數位。那有效數位以後的位就被忽略了。
所以現在清楚浮點資料儲存是如何產生誤差的了吧。