Java 动态计算最接近10美元的变化

Java 动态计算最接近10美元的变化,java,Java,我是Java新手,我正试图弄清楚如何动态计算最接近10美元的变化。例如,用户输入一个值(34.36),“我的代码”然后计算账单的小费、税金和总金额(总计44.24)。如果没有用户输入,我需要计算50.00美元的变化。我试图从44.24四舍五入到50.00,但运气不佳,显然我做错了什么。我尝试了Math.round,并尝试使用%找到余数。任何关于如何获得最接近10美元价值的总零钱的帮助都将非常有用。提前谢谢,下面是我的代码: 这是一个家庭作业项目 import java.util.Scanner;

我是Java新手,我正试图弄清楚如何动态计算最接近10美元的变化。例如,用户输入一个值(34.36),“我的代码”然后计算账单的小费、税金和总金额(总计44.24)。如果没有用户输入,我需要计算50.00美元的变化。我试图从44.24四舍五入到50.00,但运气不佳,显然我做错了什么。我尝试了Math.round,并尝试使用%找到余数。任何关于如何获得最接近10美元价值的总零钱的帮助都将非常有用。提前谢谢,下面是我的代码: 这是一个家庭作业项目

import java.util.Scanner; 
import java.text.NumberFormat;
import java.lang.Math.*;

public class test1
{
public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);
    //Get input from user
    System.out.println("Enter Bill Value:                   ");
    double x = sc.nextDouble();

    //Calculate the total bill
    double salesTax = .0875;
    double tipPercent = .2;
    double taxTotal = (x * salesTax);
    double tipTotal = (x * tipPercent);
    double totalWithTax = (x + taxTotal);
    double totalWithTaxAndTip = (x + taxTotal + tipTotal);

    //TODO:  Test Case 34.36...returns amount due to lower 10 number
    //This is where I am getting stuck                  
    double totalChange = (totalWithTaxAndTip % 10);




    //Format and display the results
    NumberFormat currency = NumberFormat.getCurrencyInstance();
    NumberFormat percent = NumberFormat.getPercentInstance();

    //Build Message / screen output
    String message =
        "Bill Value:                         " + currency.format(x) + "\n" + 
        "Tax Total:                          " + currency.format(taxTotal) + "\n" +
        "Total with Tax:                     " + currency.format(totalWithTax) + "\n" +
        "20 Percent Tip:                     " + currency.format(tipTotal) + "\n" +
        "Total with Tax and 20 Percent Tip:  " + currency.format(totalWithTaxAndTip) + "\n" +
        "Total Change:                       " + currency.format(totalChange) + "\n";

    System.out.println(message);

}
}
你做
double totalChange=round((totalWithTaxAndTip/10))*10

数学。ceil(双精度)将对一个数字进行四舍五入。所以你需要的是这样的东西:

 double totalChange = (int) Math.ceil(totalWithTaxAndTip / 10) * 10;
对于totalWithTaxAndTip=44.24,totalChange=50.00


对于totalWithTaxAndTip=40.00,totalChange=40.00

Math.round将一个数字舍入为最接近的整数,如其他人所示,需要除以10,然后在舍入后乘以10:

double totalChange = tenderedAmount - totalWithTaxAndTip;

double totalChangeRounded  = 10 * Math.round(totalChange / 10);

各位,非常感谢你们帮助我。我测试了每个人的解决方案。这是我最后的工作代码

double totalAmountPaid = totalWithTaxAndTip - (totalWithTaxAndTip % 10) + 10;   
我用许多不同的值对它进行了测试,它似乎按照我希望的方式工作


再次感谢大家抽出时间来帮助我。

从44.24到10美元的最近乘数是40,不是吗?转换为整数-除以10-加1-转换回双精度当在编程中使用金钱时,通常最好用整数表示为“美分”。1美元=100存储在一个整数中。当您输出值时,只需将其除以100,然后根据需要输出小数。这避免了使用float/double时出现舍入问题。@Sam I am-如果更改金额正好是$20.00,您的方法将得到$30。“将更改计算到最接近的10美元”:我想您不需要最接近的,但“最接近的10美元值大于您拥有的总金额”我想总有人想把事情搞定,但我会让他来处理的。