【问题标题】:How to replace doubles with BigDecimal for monies in java如何在java中用BigDecimal替换double以获得金钱
【发布时间】:2011-12-25 11:55:18
【问题描述】:

我正在做一个大学作业,我用双打来赚钱。我知道不建议对货币值使用双精度值,所以我想知道如何用 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)));
    }
}

【问题讨论】:

    标签: java currency bigdecimal


    【解决方案1】:

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

    【讨论】:

    • 我已经尝试过使用 Integer.toString 等,通过将其移回两位来添加小数但是我不知道如何通过乘以 20% 的税来计算它,如果你能帮助我那太好了。
    • 20% 是五分之一。税是amount / 5。带回家的是 (4 * amount) / 5 并检查舍入错误。
    • 抱歉我的菜鸟问题,但不会计算 4049 美分的税会导致小数点,因此计算不准确,因为 int 会忽略小数点后的任何内容?或者 NumberFormat 会解决这个问题吗?
    • 我接受这个答案的原因是因为这是他们在作业中所要求的。不过我不太确定我将如何完成这项任务。
    • 这个问题应该给你四舍五入的规则,告诉你想要处理一分的奇数部分。如果问题不清楚在这种情况下该怎么做,请询问您的讲师。您可以将事物修改为以 0.1 美分为单位,然后在计算结束时进行最终舍入。
    【解决方案2】:

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

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

    你应该可以看到四舍五入后的结果完全一样。

    【讨论】:

      【解决方案3】:

      BigDecimal 是不可变的,但您可以通过特定调用创建新的:

      BigDecimal two = new BigDecimal("2.00");
      BigDecimal four = new BigDecimal("4.00");
      
      BigDecimal result = four.divide(two);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多