【问题标题】:Divide BigDecimal by int [closed]将 BigDecimal 除以 int [关闭]
【发布时间】:2021-09-01 19:52:40
【问题描述】:

我试图将所欠的零钱除以 1,以计算出拥有多少美元。因此,如果欠 3.60,我想将其除以 1,但我使用 BigDecimal 收集更改变量,但不知道如何将其除以 1。

这是我尝试过的代码,但它不起作用。我需要使用 BigDecimal 来进行舍入错误,但我还需要将该值与 int 值一起使用。

我正在尝试输入一件物品的欠款金额,例如 5 美元,然后我输入收到的金额,例如 8.70 美元,然后我需要弄清楚如何显示多少美元、硬币、硬币和美分我会还给。到目前为止,我什至无法弄清楚如何让它显示 3 美元。这是我的代码

import java.util.Scanner;
import java.math.BigDecimal;
public class CoinMachine {

public static void main(String[] args) {

    int DollarValue = 1;

    Scanner in = new Scanner (System.in);
    
    System.out.println("Coin Machine\n");
    
    System.out.print("Enter the amount owed: ");
    BigDecimal amountOwed = in.nextBigDecimal();
    
    System.out.print("Enter the amount received: ");
    BigDecimal amountReceived = in.nextBigDecimal();
    
    if (amountReceived.compareTo(amountOwed) >= 0) {
        BigDecimal Change = (amountReceived.subtract(amountOwed));
        System.out.println("\nYour change today is $" + Change);
        
        BigDecimal Dollars = (.longValue(Change));
        System.out.println("Dollars Owed " + Dollars);
        
        
    
    
    }
    else {
        BigDecimal changeShort = (amountOwed.subtract(amountReceived));
        System.out.print("*** You did not provide enough money. You are $" + changeShort + " short. ***");
    }
    
    
    
    
    in.close();
    
    }
    
}

【问题讨论】:

  • 将一个数字除以 1 得到的数字与您开始时的数字完全相同。所以我认为这根本不会做任何事情。但如果你真的必须BigDecimal same = Change.divide( BigDecimal.ONE );
  • 提示:如果您只想要BigDecimal 的整数部分,我认为.longValue() 是更好的选择。
  • 我正在尝试修复舍入错误,但无法使用 double 来解决。我需要输入一件物品的价格,给出了多少,然后他们以美元、25 美分、1 美分、5 美分和美分的形式返还了多少
  • 再一次,除以 1 没有任何作用。这只是数学。
  • 如果你只想要美元,我已经给你了longValue()

标签: java math integer bigdecimal


【解决方案1】:

定义比例和舍入模式

    BigDecimal dollar = BigDecimal.ONE;
    BigDecimal quarter = new BigDecimal("0.25");
    BigDecimal dime = new BigDecimal("0.10");
    
    BigDecimal change = new BigDecimal("3.60");
    BigDecimal numberOfDollars = change.divide(dollar, 0, RoundingMode.DOWN);
    System.out.println(numberOfDollars);

输出是:

3

在对divide() 的调用中,我指定了0,这意味着,我想要一个小数点后没有小数的结果。我指定向下取整,所以 3.6 向下取整为 3。

同样的技巧适用于 25 美分、10 美分、5 美分和美分。例如:

    change = change.subtract(numberOfDollars.multiply(dollar));
    BigDecimal numberOfQuarters = change.divide(quarter, 0, RoundingMode.DOWN);
    System.out.println(numberOfQuarters);

2

10 美分、5 美分和美分的使用方式相同。

【讨论】:

  • 你能告诉我怎么做镍和美分吗?
  • intValue() 可能会从BigDecimal 中丢弃大量信息。三思而后行。不,三思而后行。
  • 我想现在该轮到你了。你从我为你做的所有工作中没有学到任何东西。 Nickles 和 centles 相似,非常相似。继续尝试。如果不成功,请发布一个新问题并在此处 ping 我,我有时间会看看。
  • 谢谢。我刚刚宣布了 0.5 和 0.1 的镍和美分,所以现在我会做剩下的事情。这是我第一次深入使用 BigDecimal,所以我还不知道它的所有命令。
  • 是的。谢谢,我认为这个想法是将其乘以 100,然后将其作为一个整数使用,然后在最后将其转换为小数以用于输出。这实际上听起来更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
相关资源
最近更新 更多