我意識到一個十進制數只能在二進制系統中精確地存儲爲一個浮點數,但是我不明白的是在我的輸出10/7中發生了什麼7小數點。java如何存儲float v double
在我的第一次輸出測試中,我注意到在浮點數結尾的第5位(第7位)與第4位(第7位)之後是雙精度數中的2。我認爲在浮動的第7位是4,因爲在雙第8位是2
浮動1.4285715 雙1.4285714285714286
我然後用浮點格式跑到下一個輸出測試17地方。在每個中的第8個位置是不同的 - 浮點數是6,這就是爲什麼第7個位置被四捨五入爲5我假設。
浮動1.428571462631225600 雙1.428571428571428600
在第三輸出測試我試過用字符串格式的直接鑄造的,看看會發生什麼。我得到了與第二次測試相同的結果。
如果我對複雜的浮點存儲方法有個簡單的問題 - 我很抱歉。
float f = 10/7f;
double d = 10/7d;
System.out.format
("Float %1s\nDouble %2s\n", f,d);
/*
* Float 1.4285715
Double 1.4285714285714286
*/
System.out.format
("Float %1$.17f\nDouble %2$.17f\n", f,d);
/*
* Float 1.428571462631225600
Double 1.428571428571428600
*/
System.out.format
("Float %1s\nDouble %2s\n", (double)f,d);
/*
* Float 1.4285714626312256
Double 1.4285714285714286
*/
你的問題到底是什麼? (我的帖子中沒有看到任何問號...) – maerics 2012-01-30 19:50:45
這是如何加倍存儲的: - http://en.wikipedia.org/wiki/Double-precision_floating-point_format – 2013-10-08 13:50:56