![](/img/trans.png)
[英]Date Conversion from String to sql Date in Java giving different output?
[英]java float conversion to string giving different result
為什么下面的java代碼打印相同浮點變量的不同值(小數部分)?
public static void main(String[] args) {
float f = 2001797.11f;
System.out.println(String.format("%013.2f", f));
System.out.println(Float.toString(f));
System.out.println(String.format("%018.5f", f));
}
輸出:
0002001797.13
2001797.1
000002001797.12500
混亂源於float f = 2001797.11f;
線float f = 2001797.11f;
。 最接近數學值"2001797.11"
float
實際上是2001797.125
。 你可以這樣看
System.out.println(new BigDecimal(2001797.11f));
因此, f
實際上是2001797.125
並且String.format
的2次使用已正確舍入。
那么為什么Float.toString(f)
不會產生"2001797.125"
? 這是因為Float.toString
只顯示足夠的小數位數,以便將值與其他float
值區分開來。 在這種情況下,只顯示小數位后的1
。
您必須考慮float
和double
類型處理浮點數 :這意味着它們必須在整數和小數部分之間分配32位或64位。
所以:整數部分中的最多位數,大多數位將專用於它們,小數部分的位數越少。 因此,小數部分將不太准確 。
你遇到的問題來自兩個事實:
如果您需要更多精確度(根據程序必須處理的值的大小),您應該遷移到double
。 如果你想要無限期,那就是BigDecimal
。
String.format
使用顯式格式規則,而Float.toString(float n)
使用文檔中描述的算法: http : //docs.oracle.com/javase/7/docs/api/java/lang/Float.html#的toString(浮點)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.