如何在java中用BigDecimal替换double

时间:2011-12-25 11:55:18

标签: java currency bigdecimal

我正在做大学任务,我用双打钱。我知道不建议将双精度用于货币值,所以我想知道如何替换我用BigDecimal加倍的现有代码。

由于这是一项大学任务,我不想直接帮助我的代码,也不想在这里发布,所以我创建了以下代码,我希望直接回复,即更改代码我提供的是为了让我能够理解正在发生的事情。

我想知道BigDecimal如何用int或double乘以/除以/加/减,或者甚至不是可能的。

还有其他主题涉及BigDecimal用法,但它们并未涵盖我的具体问题,但是,如果我忽略了已经回答的帖子,我会道歉。

以下是代码:

import java.util.Scanner;
import java.text.NumberFormat;

class example {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    NumberFormat fm = NumberFormat.getCurrencyInstance();

    System.out.println("Enter the first amount:");
    double money1 = in.nextDouble();
    System.out.println("Enter the second amount:");
    double money2 = in.nextDouble();
    System.out.println("Enter the third amount:");
    double money3 = in.nextDouble();

    double tax = 0.2;
    double totalmoney = money1 + money2 + money3;
    double moneytax = (totalmoney)*tax;


    System.out.println("Your money added together is: " + fm.format(totalmoney));
    System.out.println("Tax on your money is: " + fm.format(moneytax));
    System.out.println("Your money after tax deduction is: " + fm.format((totalmoney-moneytax)));
    }
}

3 个答案:

答案 0 :(得分:3)

如果你想避免使用double,你需要从一开始就不要使用它。

BigDecimal money1 = new BigDecimal(in.nextLine());

在舍入后,您应该能够看到结果完全相同。

答案 1 :(得分:3)

BigDecimal的替代方法可能是使用longs以美分进行所有计算,只需在末尾插入小数点。

答案 2 :(得分:1)

BigDecimals是不可变的,但您可以使用特定的调用创建新的:

BigDecimal two = new BigDecimal("2.00");
BigDecimal four = new BigDecimal("4.00");

BigDecimal result = four.divide(two);

您可能还想查看scale()方法。