在java中,将数字四舍五入到5美分

在java中,将数字四舍五入到5美分,java,rounding,Java,Rounding,我试图找出如何使用以下规则取整货币: Tax calculated | Taxe imputed | |---------------|--------------| | 0.99 | 1.00 | | 1.00 | 1.00 | | 1.01 | 1.05 | | 1.02 | 1.05 | 我尝试了各种舍入方法,但总是出现错误: 我有两本12.49欧元的

我试图找出如何使用以下规则取整货币:

 Tax calculated | Taxe imputed |
|---------------|--------------|
|          0.99 |         1.00 |
|          1.00 |         1.00 |
|          1.01 |         1.05 |
|          1.02 |         1.05 |
我尝试了各种舍入方法,但总是出现错误:

我有两本12.49欧元的书,含税10%; 一张14.99欧元的cd,含税20%

我尝试过这种方法,但总是得到错误的结果

double number = 12.49 * 0.1 * 2;
double number2 = 14.99 * 0.2;
double round1 = Math.round(number * 100.0 /5.0) * 5.0 / 100.0;
double round2 = Math.round(number2 * 100.0 /5.0) * 5.0 / 100.0;
控制台打印5.5(第1轮+第2轮),但我应该得到5.53

请帮忙

  • (双精度)数学四舍五入(值*10000d)/10000d

    这是5位数的精度。零的数量表示 小数位数

    请查看(堆栈溢出问题)和 (oracle文档)

    所以,要么你应该重新考虑括号的位置 (重新排列值)或请使用另一个不带四舍五入的变量 首先,然后执行round()操作

    在这种情况下

    double round1 = Math.round(number * 1000.0 /5.0) * 5.0 / 1000.0;
    double round2 = Math.round(number2 * 1000.0 /5.0) * 5.0 / 1000.0;
    
    可能会解决问题,但最好做得恰当,所以 它将在以后继续具有意义

  • 使用十进制格式输出字符串,例如

    double val=8.888888;
    DecimalFormat df = new DecimalFormat("#.###");//for 3 decimal places
    df.setRoundingMode(RoundingMode.CEILING);
    String value=df.format(val);
    
    要查看更多信息,请记住,如果确实需要,可以将其解析为数字


  • 这回答了你的问题吗?我试过这个方法,但没有成功working@MajdiTaleb尝试使用BigDecimal并显示您声称不起作用的代码。@Kan相同的结果5.5总是代替5.53不是您的问题,但很重要:Google“不要使用浮动来赚钱”
    double val=8.888888;
    DecimalFormat df = new DecimalFormat("#.###");//for 3 decimal places
    df.setRoundingMode(RoundingMode.CEILING);
    String value=df.format(val);