在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);