Java Puzzlers筆記--Puzzle 2: Time for a change 關於浮點型的問題
public class Change{
public static void main(String[] args){
System.out.println(2.00 - 1.10);
}
}
Solution:
結果顯示是:
0.8999999999999999999999999999
由於1.1不能用double來準確表示,而是用了一個接近的數來表示。
TID:
not all decimals can be represnted exaclty using binary floating-point;
Binary floating-point is particularly ill-suited to calculations.
Always use the BigDecimal(String) constructor, newver BigDecimal(double).
avoid float and double where exact answers are required; for monetary calculations, use int, long, or BigDecimal.
Correctly:
import java.math.BigDecimal;
public class Change{
public static void main(String[] args){
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
}
}
public static void main(String[] args){
System.out.println(2.00 - 1.10);
}
}
Solution:
結果顯示是:
0.8999999999999999999999999999
由於1.1不能用double來準確表示,而是用了一個接近的數來表示。
TID:
not all decimals can be represnted exaclty using binary floating-point;
Binary floating-point is particularly ill-suited to calculations.
Always use the BigDecimal(String) constructor, newver BigDecimal(double).
avoid float and double where exact answers are required; for monetary calculations, use int, long, or BigDecimal.
Correctly:
import java.math.BigDecimal;
public class Change{
public static void main(String[] args){
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.