電商金額計算的 4 個坑,千萬注意了!
閱讀本文大概需要 2.8 分鐘。
作者:叁滴水
來源:https://blog.csdn.net/qq_30285985/
前言
1、多精度計算問題
public static void main (String[] args) {
double num1 = 1;
double num2 = 31.2;
double num3 = 323.03;
System.out.println (num1+num2+num3);
/**
* 355.22999999999996
*/
}2、包裝類型比對
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2); // true
System.out.println(i3==i4); // false
}
//Integer的valueOf方法
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
//Double的valueOf方法
public static Double valueOf(String s) throws NumberFormatException {
return new Double(parseDouble(s));
}
public static void main (String[] args){
Double i1 = 100d;
System.out.println(i1.equals ("100"));
//false
}
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
public static void main (String[] args){
Double i1 = 100d;
System.out.println(i1.compareTo (100d)); //0
System.out.println(i1.compareTo (1d)); //1
}
3、除以0會怎樣?
public static void main(String[] args) {
Double d = 1d;
double v = d / 0d;
System.out.println(v);
//Infinity
}
public static void main(String[] args) {
Double d = 0d;
double v = d / 0d;
System.out.println(v);
//NaN
}
4、float轉(zhuǎn)double
public static void main(String[] args) {
Float f = 12312.12f;
System.out.println(f.doubleValue());
System.out.println(Double.parseDouble (f.toString ()));
//12312.1201171875
//12312.12
}
推薦閱讀:
用了幾年的 Fastjson,我最終替換成了Jackson!
最近面試BAT,整理一份面試資料《Java面試BATJ通關手冊》,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結構等等。
朕已閱 

