电商金额计算的 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转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并发、SSM、微服务、数据库、数据结构等等。
朕已阅