在Java中最多2位小数?

round up to 2 decimal places in java?

本问题已经有最佳答案,请猛点这里访问。

我读过很多StackOverflow问题,但似乎没有一个适合我。我用math.round()四舍五入。这是代码:

1
2
3
4
5
6
7
8
9
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行并发布它,这将是非常好的帮助。


好吧,这一个有效…

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

输出是

1
123.14

或者如鲁芬所说

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

这对你也有好处。


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


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


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

回到你的代码,用100.00替换100,让我知道它是否有效。但是,如果您想要正式,请尝试以下操作:

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

尝试:

1
2
3
4
5
6
7
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);   }}


我知道这是一个2年前的问题,但由于每个人都面临着在某个时间点取整数值的问题,我想分享一种不同的方法,通过使用BigDecimal类,我们可以将数值取整到任何比例。在这里,我们可以避免额外的步骤,如果我们使用DecimalFormat("0.00")或使用Math.round(a * 100) / 100就需要额外的步骤来获得最终值。③

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);

    }
}

这个程序会给我们下面的输出

1
2
Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14


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

应该是

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

将"d"添加到100使其为双文本,因此生成的结果将具有精度


这是一个很长的问题,但却是一个全面的解决方案,永远不会失败。

只需将您的数字作为一个双精度数传递给此函数,它将返回您将十进制值四舍五入到最接近的值5;

如果4.25,输出4.25

如果4.20,输出4.20

如果4.24,输出4.20

如果4.26,输出4.30

如果要四舍五入到小数点后两位,则使用

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

如果最多3个位置,则新的decimalFormat("35;")。

如果最多N个位置,则新的decimalFormat(".ntimes")。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 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))));

            }

似乎你被整数算术击中了:在某些语言中(int)/(int)总是被计算为整数算术。为了强制执行浮点运算,请确保至少有一个操作数是非整数:

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


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

1
2
3
4
5
6
7
8
9
class round{
    public static void main(String args[]){

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

    System.out.println(roundOff);
}
}


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

在大多数情况下应该是正常的。例如,如果希望与double兼容,您仍然可以更改类型。