我非常擅长四舍五入。我正试图将价值四舍五入到我国货币的四舍五入。
舍入示例将是:
1.01 > 1.00
我怎么能做这种舍入?非常感谢。
1.02 > 1.00
1.03 > 1.05
1.04 > 1.05
1.06 > 1.05
1.07 > 1.05
1.08 > 1.10
1.09 > 1.10
答案 0 :(得分:2)
看起来你正在以0.05 = 1/20的方式进行四舍五入。以下是有效的:
public static double roundCurrency( double value ) {
return Math.round(value * 20.0 ) / 20.0;
}
答案 1 :(得分:0)
double roundedvalue= Math.round( YourValue* 100.0 ) / 100.0;
答案 2 :(得分:0)
double roundedvalue= Math.round( YourValue* 2.0 ) / 2.0;
答案 3 :(得分:0)
这似乎给你正确的映射 - 你可能需要在确定截止点的确切位置时调整它。
public void test() {
double [] tests = new double[] {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9};
for ( double d : tests) {
System.out.println(" "+d + " -> "+round(d, .05, 0.5));
}
}
double round(double d, double fraction, double bias) {
return Math.floor(d / fraction + bias) * fraction;
}
打印:
1.01 -> 1.0
1.02 -> 1.0
1.03 -> 1.05
1.04 -> 1.05
1.05 -> 1.05
1.06 -> 1.05
1.07 -> 1.05
1.08 -> 1.1
1.09 -> 1.1
答案 4 :(得分:0)
Math.round
可以将数字舍入到最接近的整数。看起来你正在尝试舍入到最接近的0.5的倍数。解决这类问题的一般方法是
roundedValue = Math.round (X / M) * M;
舍入到M
的最接近倍数。所以在你的情况下将是
roundedValue = Math.round (X / 0.5) * 0.5;
与
相同roundedValue = Math.round (X * 2.0) / 2.0;
同样地,如果你想要将某些东西舍入到最接近的倍数,比如0.01,那么其中一个会起作用:
roundedValue = Math.round (X / 0.01) * 0.01;
roundedValue = Math.round (X * 100.0) / 100.0;
编辑:看起来你已经改变了你的问题,所以我之前说的关于舍入到最接近的0.5的倍数是不正确的,现在你正在四舍五入到最接近0.05的倍数。无论如何,我讨论的一般方法仍然有效。
答案 5 :(得分:0)
查看关于Math Class的http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html文档。它允许您执行Math.round(double x)
和Math.ceil(double x)
等操作
Math.floor(double x)
和double value = 1.6;
String valueToString = Double.toString(value);
String [] numbers = valueToString.split(".");
String decimalNums = numbers[1];
int decimal = Integer.parseInt(decimalNums);
if(decimal > 0 && decimal < 5){
decimal = Math.floor(decimal);
}else if(decimal >= 5 && decimal < 8){
decimal = 5;
}else{
decimal = Math.ceil(decimal);
}
。您可以将这些与if else语句结合使用,例如
{{1}}
这仅适用于具有一个小数位的值。但它是一个开始。希望它有所帮助。