web-gelistirme-sc.com

Java'da 2 ondalık basamağa kadar?

Birçok yığın akışı sorusu okudum ama hiçbiri benim için çalışmıyor gibi görünüyor. Yuvarlamak için math.round() kullanıyorum. kod budur:

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

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

    System.out.println(roundOff);
}
}

elde ettiğim çıktı: 123, ancak 123.14 olmasını istiyorum. *100/100 eklemenin işe yarayacağını okudum ama görebildiğiniz gibi çalışmayı başaramadım.

hem giriş hem de çıkışın iki katı olması kesinlikle şarttır.

yukarıdaki kodun 4. satırını değiştirip yollamanız çok faydalı olacaktır.

165
Aayush Mahajan

Bu bir işe yarıyor ...

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

Çıktı

123.14

Veya @Rufein’in dediği gibi

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

bu sizin için de yapacak.

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

Kodunuza geri dönün ve 100 ile 100.00 değiştirin ve çalışıp çalışmadığını bana bildirin. Ancak, resmi olmak istiyorsanız, şunu deneyin:

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

Deneyin :

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
Shyamkkhadka

Bunun 2 yıllık bir soru olduğunu biliyorum ama her beden bir zaman diliminde değerleri yuvarlamada bir sorunla karşı karşıya kalıyor. BigDecimal sınıfını kullanarak bize herhangi bir ölçekte yuvarlak değerler verebilecek farklı bir yol paylaşmak istiyorum. DecimalFormat("0.00") ya da Math.round(a * 100) / 100 kullanıyorsak, nihai değeri elde etmek için gereken ilave adımları önleyebilirsiniz.

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

    }
}

Bu program bize çıktının altında verecek

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

olmalı

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

'D' yi 100'e eklemek onu çift anlamlıdır, böylece elde edilen sonuç hassasiyete sahip olur.

8
Arun

Bu çok uzun sürüyor ancak eksiksiz bir çözüm, hiçbir zaman başarısız olmuyor

Numaranızı bu işleve bir çift olarak verin, ondalık değerini 5'e en yakın değere yuvarlama;

4.25, Çıkış 4.25

4.20, Çıkış 4.20

4.24, Çıkış 4.20

4.26, çıktı 4.30

2 ondalık basamağa kadar yuvarlamak istiyorsanız,

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

en fazla 3 basamak varsa, yeni DecimalFormat ("#. ###")

n kadar yer varsa, yeni 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))));

            }
5
user1023

tamsayılı aritmetik tarafından vurulmuş gibi görünüyorsun: bazı dillerde (int)/(int) her zaman tamsayı aritmetik olarak değerlendirilir. Kayan nokta aritmetiğini zorlamak için, işlenenlerden en az birinin tam sayı olmadığından emin olun:

double roundOff = Math.round(a*100)/100.f;
3
umläute

Kodunu yeni değiştirdim. Benim sistemimde iyi çalışıyor. Bunun işe yarayıp yaramadığını görmek

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
afrin216