我一直在尝试编写一个Java代码来将值舍入到下面的要求。
如果x = 63.88 => roundedValue = 64.00;
如果x = 63.50 => roundedValue = 64.00
如果x = 63.32 => roundedValue = 63.32
我试过了不同的roundingModes,如CEILING,DOWN,FLOOR,HALFDOWN。 我也试过Math.round();
但是我无法获得预期的输出。 我的输入是一个字符串,输出是一个字符串。
请找到我在下面尝试过的代码段
BigDecimal value1 = new BigDecimal(input);
value1=value1.setScale(2, RoundingMode.HALF_EVEN);
//float rounded=Math.round(amount);
String finalValue=String.valueOf(value1);
我无法获得所需的输出。请告诉我如何实现这一目标?
ps:我应该考虑使用float还是BigDecimal?
答案 0 :(得分:3)
if(x%1 >= .5)
{ x = Math.round(x) }
else //do nothing
这似乎可以为您提供所需的输出。因此,如果你真的想要,你可以覆盖或创建自己的方法来调用舍入
答案 1 :(得分:0)
您想要做的是提供您自己的MathContext
来指定您想要执行的舍入行为。
您最接近当前要求的是:使用RoundingMode.HALF_UP
或RoundingMode.UNNECESSARY
为此你必须使用BigDecimal
,因为Double和Float不会暴露四舍五入。
答案 2 :(得分:0)
正如在您的帖子中一样,如果您想使用十进制舍入,则可以使用BigDecimal
。
如果您想要对数字> = X.5进行舍入,并避免舍入数字< X.5然后你可以使用这段代码:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Round {
public static void main(String[] args) {
System.out.println(round("63.88"));
System.out.println(round("63.50"));
System.out.println(round("63.32"));
}
private static BigDecimal round(String input) {
BigDecimal value = new BigDecimal(input);
BigDecimal rounded = value.setScale(0, RoundingMode.HALF_UP);
if (rounded.compareTo(value) > 0)
return rounded.setScale(2);
return value;
}
}
输出结果为:
64.00
64.00
63.32
答案 3 :(得分:0)
public static void main(String args[]) {
Double d = 63.18;
DecimalFormat df = new DecimalFormat("00.00");
if(d % 1 >= 0.5)
System.out.println(df.format(Math.round(d)));
else
System.out.println(d);
}