округлить до 2 десятичных знаков в java? [дубликат]



этот вопрос уже есть ответ здесь:




  • Как округлить число до n десятичных знаков в Java

    29 ответов



Я прочитал много вопросов 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 кода выше и разместили ее.

216   12  

12 ответов:

Ну это работает...

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

выход

123.14

или как сказал @Rufein

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

это сделает это и для вас.

     double d = 2.34568;
     DecimalFormat f = new DecimalFormat("##.00");
     System.out.println(f.format(d));
String roundOffTo2DecPlaces(float val)
{
    return String.format("%.2f", val);
}
BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);

вернитесь к своему коду и замените 100 by 100.00 и дайте мне знать, если это работает. Однако, если вы хотите быть формальным, попробуйте это:

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

Я знаю, что это 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);

    }
}

эта программа даст нам ниже вывода

Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
double roundOff = Math.round(a*100)/100;

должно быть

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

добавление 'D' К 100 делает его двойным литералом, поэтому полученный результат будет иметь точность

попробуй :

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);   }}

Это длинный, но полное доказательство решения, никогда не подводит

просто передайте свой номер этой функции как двойной, он вернет вам округление десятичного значения до ближайшего значения 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))));

            }

похоже, что вы попали в целочисленную арифметику: в некоторых языках (int)/(int) всегда будет оцениваться как целочисленная арифметика. чтобы заставить арифметику с плавающей запятой, убедитесь, что хотя бы один из операндов не является целым числом:

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

Я только что изменил ваш код. Он отлично работает в моей системе. Смотрите, если это поможет

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

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

    System.out.println(roundOff);
}
}
public static float roundFloat(float in) {
    return ((int)((in*100f)+0.5f))/100f;
}

должно быть в порядке для большинства случаев. Вы все еще можете изменять типы, если вы хотите быть совместимыми с двойниками, например.

Comments

    Ничего не найдено.