在Java中最多2位小数?

时间:2012-07-28 13:23:42

标签: java

我已经阅读了很多stackoverflow问题,但似乎没有一个对我有用。我正在使用math.round()来完善。 这是代码:

class round{
    public static void main(String args[]){

    double a = 123.13698;
    double roundOff = Math.round(a*100)/100;

    System.out.println(roundOff);
}
}

我得到的输出是:123但我希望它是123.14。我读到添加*100/100会有所帮助,但正如您所见,我无法让它发挥作用。

输入和输出都必须是双倍的。

如果您更改上面代码的第4行并将其发布,那将会非常有用。

12 个答案:

答案 0 :(得分:371)

这个有用......

double roundOff = Math.round(a * 100.0) / 100.0;

输出

123.14

或者@Rufein说

 double roundOff = (double) Math.round(a * 100) / 100;

这也可以帮到你。

答案 1 :(得分:77)

     double d = 2.34568;
     DecimalFormat f = new DecimalFormat("##.00");
     System.out.println(f.format(d));

答案 2 :(得分:46)

String roundOffTo2DecPlaces(float val)
{
    return String.format("%.2f", val);
}

答案 3 :(得分:43)

BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);

答案 4 :(得分:13)

返回您的代码,并将100替换为100.00,并告诉我它是否有效。 但是,如果你想成为正式的,试试这个:

import java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value); 
double finalValue = (Double)df.parse(formate) ;

答案 5 :(得分:8)

double roundOff = Math.round(a*100)/100;

应该是

double roundOff = Math.round(a*100)/100D;

将'D'添加到100使其成为双字面值,因此生成的结果将具有精度

答案 6 :(得分:8)

我知道这是一个2岁的问题,但是因为每个人都面临着在某个时间点对数值进行舍入的问题。我想分享一种不同的方法,通过使用{{{{{{{{ 1}} class。如果我们使用BigDecimal或使用DecimalFormat("0.00"),我们可以避免获取最终值所需的额外步骤。

Math.round(a * 100) / 100

这个程序会给我们以下输出

import java.math.BigDecimal;

public class RoundingNumbers {
    public static void main(String args[]){
        double number = 123.13698;
        int decimalsToConsider = 2;
        BigDecimal bigDecimal = new BigDecimal(number);
        BigDecimal roundedWithScale = bigDecimal.setScale(2, 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);

    }
}

答案 7 :(得分:8)

尝试:

class round{
public static void main(String args[]){

double a = 123.13698;
double roundOff = Math.round(a*100)/100;
String.format("%.3f", roundOff); //%.3f defines decimal precision you want
System.out.println(roundOff);   }}

答案 8 :(得分:5)

这是一个很长的解决方案,但绝对不会失败

只需将您的号码作为双精度传递给此函数,它会返回四舍五入到最接近的值5;

如果4.25,输出4.25

如果4.20,输出4.20

如果4.24,输出4.20

如果4.26,输出4.30

如果要舍入到2位小数,请使用

DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));

如果最多3个地方,新的DecimalFormat(“#。###”)

如果最多n个地方,新的DecimalFormat(“#。 nTimes#”)

 public double roundToMultipleOfFive(double x)
            {

                x=input.nextDouble();
                String str=String.valueOf(x);
                int pos=0;
                for(int i=0;i<str.length();i++)
                {
                    if(str.charAt(i)=='.')
                    {
                        pos=i;
                        break;
                    }
                }

                int after=Integer.parseInt(str.substring(pos+1,str.length()));
                int Q=after/5;
                int R =after%5;

                if((Q%2)==0)
                {
                    after=after-R;
                }
                else
                {
                   if(5-R==5)
                   {
                     after=after;
                   }
                   else after=after+(5-R);
                }

                       return Double.parseDouble(str.substring(0,pos+1).concat(String.valueOf(after))));

            }

答案 9 :(得分:3)

看起来像是被整数运算击中:在某些语言中(int)/(int)将始终被评估为整数运算。 为了强制浮点运算,请确保至少有一个操作数是非整数:

double roundOff = Math.round(a*100)/100.f;

答案 10 :(得分:1)

我刚修改了你的代码。它在我的系统中工作正常。看看这是否有帮助

class round{
    public static void main(String args[]){

    double a = 123.13698;
    double roundOff = Math.round(a*100)/100.00;

    System.out.println(roundOff);
}
}

答案 11 :(得分:-1)

public static float roundFloat(float in) {
    return ((int)((in*100f)+0.5f))/100f;
}

大多数情况都应该没问题。如果你想要兼容双打,你仍然可以改变类型。