我尝试了以下代码,但它不适用于特定情况。
例如:假设,我有一个 double value = 2.5045 ,我希望使用下面的代码将其四舍五入到两个小数位。在四舍五入后,我得到答案为 2.5。但我希望答案为 2.50。在这种情况下,零被修剪掉。是否有任何方法可以保留零,以便在四舍五入后获得所需的答案 2.50 。
private static DecimalFormat twoDForm = new DecimalFormat("#.##");
public static double roundTwoDecimals(double amount) {
return Double.valueOf(twoDForm.format(amount));
}
答案 0 :(得分:3)
尝试这种模式
new DecimalFormat("0.00");
但这只会改变格式化,double不能保存小数点后的位数,请尝试BigDecimal
BigDecimal bd = new BigDecimal(2.5045).setScale(2, RoundingMode.HALF_UP);
答案 1 :(得分:1)
查看DecimalFormat
的文档。对于#
,它说:
数字,零表示缺席
0
可能就是你想要的:
位
所以你要找的是"0.00"
或"#.00"
作为格式字符串,取决于你是否希望句点之前的第一个数字,以便在数字绝对值小的情况下可见比0。
答案 2 :(得分:1)
试试这个
DecimalFormat format = new DecimalFormat("#");
format.setMinimumFractionDigits(2);
answer.setText(format.format(data2));
答案 3 :(得分:0)
试试这个
double d = 4.85999999999;
long l = (int)Math.round(d * 100); // truncates
d = l / 100.0;
答案 4 :(得分:0)
您将返回double
。但double
或Double
是表示数字的对象,不包含任何格式信息。如果您需要输出两个小数位,那么当您将double
转换为String
时,要点就是这样做。
答案 5 :(得分:0)
如果你想忽略0
,请使用#new DecimalFormat("###,#0.00").format(d)
答案 6 :(得分:0)
还有另一种方法可以实现这一目标。我已在post中发布了答案 我会在这里再次回答。因为我们需要多次舍入值。
public class RoundingNumbers {
public static void main(String args[]){
double number = 2.5045;
int decimalsToConsider = 2;
BigDecimal bigDecimal = new BigDecimal(number);
BigDecimal roundedWithScale = bigDecimal.setScale(decimalsToConsider, BigDecimal.ROUND_HALF_UP);
System.out.println("Rounded value with setting scale = "+roundedWithScale);
bigDecimal = new BigDecimal(number);
BigDecimal roundedValueWithDivideLogic = bigDecimal.divide(BigDecimal.ONE,decimalsToConsider,BigDecimal.ROUND_HALF_UP);
System.out.println("Rounded value with Dividing by one = "+roundedValueWithDivideLogic);
}
}
我们将得到的输出是
Rounded value with setting scale = 2.50
Rounded value with Dividing by one = 2.50
答案 7 :(得分:0)
double kilobytes = 1205.6358;
double newKB = Math.round(kilobytes*100.0)/100.0;
DecimalFormat df = new DecimalFormat("###.##");
System.out.println("kilobytes (DecimalFormat) : " + df.format(kilobytes));
如果您仍然遇到上述问题,请尝试此操作