如何在java中总是舍入到2位小数

时间:2014-02-12 11:59:24

标签: java

我尝试了以下代码,但它不适用于特定情况。

例如:假设,我有一个 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));
            }

8 个答案:

答案 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。但doubleDouble是表示数字的对象,不包含任何格式信息。如果您需要输出两个小数位,那么当您将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));

如果您仍然遇到上述问题,请尝试此操作