繁体   English   中英

双倍到BigDecimal Java

[英]Double to BigDecimal Java

将所有这些双精度值更改为BigDecimal的最佳方法是什么? 我想我一开始就没有意识到我应该对基于财务的程序使用BigDecimal。 我对Java还是很陌生,感谢所有反馈。

private static class TaxBracket {

    final double minSalary;
    final double maxSalary;
    final double taxRate;

    TaxBracket(double minSalary, double maxSalary, double taxRate) {
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
private static TaxBracket[] singleFiler;
static {
    singleFiler = new TaxBracket[]
        {
            new TaxBracket(0.0, 9075.0, 0.10),      //Index 0 TierOne
            new TaxBracket(9076.0, 36900.0, 0.15),  //Index 1 TierTwo
            new TaxBracket(36901.0, 89350.0, 0.25), //Index 2 TierThree
            new TaxBracket(89351.0, 186350.0, 0.28),//Index 3 TierFour
            new TaxBracket(186351.0, 405100.0, 0.33),//Index 4 TierFive
            new TaxBracket(405101.0, 406750.0, 0.35),//Index 5 TierSix
            new TaxBracket(406751.0, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };
}
private static TaxBracket[] jointFiler;
static {
    jointFiler = new TaxBracket[]
        {
            new TaxBracket(0.0, 18150.0, 0.10),      //Index 0 TierOne
            new TaxBracket(18151.0, 73800.0, 0.15),  //Index 1 TierTow
            new TaxBracket(73801.0, 148850.0, 0.25), //Index 2 TierThree
            new TaxBracket(148851.0, 226850.0, 0.28),//Index 3 TierFour
            new TaxBracket(226851.0, 405100.0, 0.33),//Index 4 TierFive
            new TaxBracket(405101.0, 457600.0, 0.35),//Index 5 TierSix
            new TaxBracket(457601.0, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };
}
private static TaxBracket[] hohFiler;
static {
    hohFiler = new TaxBracket[]
        {
            new TaxBracket(0.0, 12950.0, 0.10),      //Index 0 TierOne
            new TaxBracket(12951.0, 49400.0, 0.15),  //Index 1 TierTow
            new TaxBracket(49401.0, 127550.0, 0.25), //Index 2 TierThree
            new TaxBracket(127551.0, 206600.0, 0.28),//Index 3 TierFour
            new TaxBracket(206601.0, 405100.0, 0.33),//Index 4 TierFive
            new TaxBracket(405101.0, 432200.0, 0.35),//Index 5 TierSix
            new TaxBracket(432201.0, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };

你应该:

  1. 在所有受影响的地方将double更改为BigDecimal
  2. new TaxBracket(...)new TaxBracket(...)的参数从9075.0new BigDecimal("9075.0") 注意引号。 如果您不引用值,那么您将无法解决任何问题。

或者,您可以将构造函数参数更改为String并在构造函数内执行new BigDecimal(...) ,这可能会更整洁。

您可以这样操作(如果要保留double值作为输入):

void changeToBigDecimal(){
    BigDecimal minSalaryDec = new BigDecimal(this.minSalary, MathContext.DECIMAL64);
    BigDecimal maxSalaryDec = new BigDecimal(this.maxSalary, MathContext.DECIMAL64);
    BigDecimal taxRateDec= new BigDecimal(this.taxRate, MathContext.DECIMAL64);
}

并在构造函数中设置初始值后调用它。 如果需要,也可以使它们成为全局变量,而不是局部变量。

我建议您将TaxBracket类顶部的3个double变量更改为BigDecimals。 在TaxBracket的构造函数中,使用BigDecimal构造函数,构造函数需要加倍

完成后,它应该看起来像这样:

private static class TaxBracket {

final BigDecimal minSalary;
final BigDecimal maxSalary;
final BigDecimal taxRate;

TaxBracket(double minSalary, double maxSalary, double taxRate) {
    this.minSalary = new BigDecimal(minSalary);
    this.maxSalary = new BigDecimal(maxSalary );
    this.taxRate = new BigDecimal(taxRate );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM