知乎专栏 |
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(); } }