Java比较浮点数

package com.nightglow.build.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class NumberLearn {

    public static boolean compareNum(Double numA, Double numB, Double epsilon) {
        return Math.abs(numA - numB) <= epsilon;
    }

    public static boolean compareNum(BigDecimal numA, BigDecimal numB, int scale, RoundingMode roundingMode) {
        return numA.setScale(scale, roundingMode).equals(numB.setScale(scale, roundingMode));
    }

    public static void main(String[] args) {
        Double epsilon = 1e-5;
        Double doubleA = 123.45678;
        Double doubleB = 123.45679;
        Double doubleC = 123.456781;
        System.out.println(compareNum(doubleA, doubleB, epsilon));
        System.out.println(compareNum(doubleA, doubleC, epsilon));

        int scale = 4;
        RoundingMode roundingMode = RoundingMode.HALF_UP;
        BigDecimal bigDecimalA = new BigDecimal(doubleA);
        BigDecimal bigDecimalB = new BigDecimal(doubleB);
        BigDecimal bigDecimalC = new BigDecimal(doubleC);
        System.out.println(compareNum(bigDecimalA, bigDecimalB, scale, roundingMode));
        System.out.println(compareNum(bigDecimalA, bigDecimalC, scale, roundingMode));

        System.out.println(compareNum(new BigDecimal(0), new BigDecimal(0), scale, roundingMode));
    }
}
posted @ 2023-03-15 01:09  蒋智  阅读(33)  评论(0)    收藏  举报