在Java中最多2位小数?

Aay*_*jan 179 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);
}
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:123但我希望它是123.14.我读到添加*100/100会有所帮助但是你可以看到我没有设法让它工作.

输入和输出都是双倍的绝对必要.

如果您更改上面代码的第4行并发布它将会非常有用.

SiB*_*SiB 403

那么这个有效...

double roundOff = Math.round(a * 100.0) / 100.0;
Run Code Online (Sandbox Code Playgroud)

输出是

123.14
Run Code Online (Sandbox Code Playgroud)

或者像@Rufein说的那样

 double roundOff = (double) Math.round(a * 100) / 100;
Run Code Online (Sandbox Code Playgroud)

这也适合你.

  • 这可以调整到最多3或5位小数? (7认同)
  • 还在想为什么没有人提到新的BigDecimal(123.13698).round(新的MathContext(5)).doubleValue() (5认同)
  • @VishalSaxena 如果人们期望结果是 395.04 那么他们就错了。395.0349999999 更接近 395.03,因此 395.03 是正确答案。 (4认同)
  • 它也可以工作`double roundOff =(double)Math.round(a*100)/ 100;` (2认同)
  • 嗯,是的,因为它确实发生在我身上:) (2认同)
  • (Math.round(395.0349999999 * 100)/ 100.0。)将变为395.03。我可以理解为什么395034是最接近的长度,然后又除以100。但是我认为通常人们会期望结果为395.04。 (2认同)

ami*_*jer 83

     double d = 2.34568;
     DecimalFormat f = new DecimalFormat("##.00");
     System.out.println(f.format(d));
Run Code Online (Sandbox Code Playgroud)

  • 你导入java.text.DecimalFormat; ? (11认同)
  • 仅当double number不小于1且大于-1时才有效-发生这种情况时,它不显示0。 (2认同)

Aru*_*run 51

String roundOffTo2DecPlaces(float val)
{
    return String.format("%.2f", val);
}
Run Code Online (Sandbox Code Playgroud)

  • 是的@Arun.使用String.format,我可以格式化我的国家用来舍入税收小数位的方式. (3认同)
  • @ CarlosA.Junior你说用上面的方法不会给出一致的结果吗? (2认同)

Rei*_*eus 45

BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);
Run Code Online (Sandbox Code Playgroud)

  • 是的,对于 Java 9+,使用“RoundingMode.HALF_EVEN”来复制此解决方案 (3认同)

cyb*_*ron 13

回到你的代码,并替换100100.00,让我知道它是否有效.但是,如果你想成为正式的,试试这个:

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


Aru*_*run 8

double roundOff = Math.round(a*100)/100;
Run Code Online (Sandbox Code Playgroud)

应该

double roundOff = Math.round(a*100)/100D;
Run Code Online (Sandbox Code Playgroud)

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


Shi*_*ari 8

我知道这是一个2岁的问题,但是因为每个人都面临着在某些时候将数值四舍五入的问题.我想分享一种不同的方式,通过使用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);

    }
}
Run Code Online (Sandbox Code Playgroud)

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

Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 BigDecimal.ROUND_HALF_EVEN 来实现类似的逻辑,例如 Math.round() (1.204 = 1.20, 1.205 = 1.21)。 (2认同)

Shy*_*dka 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);   }}
Run Code Online (Sandbox Code Playgroud)


uml*_*ute 6

似乎您受到整数算术的打击:在某些语言中 (int)/(int) 将始终被评估为整数算术。为了强制进行浮点运算,请确保至少有一个操作数是非整数:

double roundOff = Math.round(a*100)/100.f;
Run Code Online (Sandbox Code Playgroud)

  • 使用“double roundOff = Math.round(a*100F)/100.f;”,输出更加混乱。它是:`123.13999938964844` (2认同)

小智 5

这是一个漫长的过程,但却是一个完整的解决方案,永远不会失败

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

如果是4.25,则输出4.25

如果是4.20,则输出4.20

如果是4.24,则输出4.20

如果是4.26,则输出4.30

如果您想将小数点后两位取整,请使用

DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));
Run Code Online (Sandbox Code Playgroud)

如果最多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))));

            }
Run Code Online (Sandbox Code Playgroud)