| 知乎专栏 |
float 不能直接做减法运算
float a = 77.22f; float b = 77.2f; System.out.println((float)a-b); System.out.println((float)a+b); 输出结果为: 0.020004272 154.42
package cn.netkiller.example;
import java.math.BigDecimal;
public class Math {
public Math() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
float a = 77.22f;
float b = 77.2f;
System.out.println((float) a + b);
System.out.println((float) a - b);
System.out.println((float) a * b);
System.out.println((float) a / b);
System.out.println("-------------");
System.out.println(add(a, b));
System.out.println(sub(a, b));
System.out.println(mul(a, b));
System.out.println(div(a, b));
}
public static float add(float v1, float v2) {
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.add(b2).floatValue();
}
public static float sub(float v1, float v2) {
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.subtract(b2).floatValue();
}
public static float mul(float v1, float v2) {
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.multiply(b2).floatValue();
}
public static float div(float v1, float v2) {
return div(v1, v2, 5);
}
public static float div(float v1, float v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).floatValue();
}
public static float round(float v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Float.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).floatValue();
}
}