naar boven afronden op 2 decimalen in java?

Ik heb veel stackoverflow-vragen gelezen, maar geen enkele lijkt voor mij te werken. ik gebruik math.round() om af te ronden.
dit is de code:

class round{
    public static void main(String args[]){
    double a = 123.13698;
    double roundOff = Math.round(a*100)/100;
    System.out.println(roundOff);
}
}

de output die ik krijg is: 123 maar ik wil dat het 123.14 is. ik heb gelezen dat het toevoegen van *100/100 zal helpen, maar zoals je kunt zien ben ik er niet in geslaagd om het werkend te krijgen.

het is absoluut essentieel dat zowel invoer als uitvoer een dubbele zijn.

het zou een grote hulp zijn als je regel 4 van de bovenstaande code zou veranderen en posten.


Antwoord 1, autoriteit 100%

Nou, deze werkt…

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

Uitvoer is

123.14

Of zoals @Rufein zei

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

dit zal het ook voor u doen.


Antwoord 2, autoriteit 20%

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

Antwoord 3, autoriteit 14%

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

Antwoord 4, autoriteit 11%

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

Antwoord 5, autoriteit 3%

Ga terug naar je code en vervang 100 door 100.00 en laat me weten of het werkt.
Als je echter formeel wilt zijn, probeer dan dit:

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

Antwoord 6, autoriteit 2%

Ik weet dat dit een vraag van 2 jaar oud is, maar aangezien elk lichaam een ​​probleem heeft om de waarden op een bepaald moment af te ronden. Ik zou graag een andere manier willen delen die ons afgeronde waarden op elke schaal kan geven door BigDecimal klasse .Hier kunnen we extra stappen vermijden die nodig zijn om de uiteindelijke waarde te krijgen als we DecimalFormat("0.00") gebruiken of 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);
    }
}

Dit programma zou ons onderstaande output geven

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

Antwoord 7, autoriteit 2%

Probeer:

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

Antwoord 8, autoriteit 2%

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

zou moeten zijn

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

Door ‘D’ toe te voegen aan 100 wordt het dubbel letterlijk, dus het geproduceerde resultaat heeft precisie


Antwoord 9

Dit is een lange maar een volledig bewijsbare oplossing, faalt nooit

Geef gewoon je getal als dubbel aan deze functie door, het zal je de decimale waarde naar boven afronden op de dichtstbijzijnde waarde van 5;

indien 4.25, output 4.25

indien 4.20, uitgang 4.20

indien 4.24, uitgang 4.20

indien 4.26, uitgang 4.30

als je wilt afronden op 2 decimalen, gebruik dan

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

indien maximaal 3 plaatsen, nieuwe DecimalFormat(“#.###”)

indien maximaal n plaatsen, nieuwe 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))));
            }

Antwoord 10

het lijkt alsof je wordt geraakt door rekenkunde met gehele getallen: in sommige talen wordt (int)/(int) altijd geëvalueerd als rekenkunde met gehele getallen.
om rekenkunde met drijvende komma te forceren, moet u ervoor zorgen dat ten minste één van de operanden geen geheel getal is:

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

Antwoord 11

Ik heb zojuist je code aangepast. In mijn systeem werkt het prima. Kijk of dit helpt

class round{
    public static void main(String args[]){
    double a = 123.13698;
    double roundOff = Math.round(a*100)/100.00;
    System.out.println(roundOff);
}
}

Antwoord 12

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

Zou in de meeste gevallen in orde moeten zijn. Je kunt nog steeds van type veranderen als je bijvoorbeeld wilt voldoen aan doubles.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes