Math.round gebruiken om af te ronden op één decimaal?

Ik heb deze twee variabelen

double num = 540.512
double sum = 1978.8

Toen deed ik deze uitdrukking

double total = Math.round((num/ sum * 100) * 10) / 10;

maar ik eindig met 27.0.

In feite heb ik veel andere variabelen en als ik ze in de uitdrukking gebruik, krijg ik altijd een 0 op de tiende plaats.


Antwoord 1, autoriteit 100%

Nuttige methode die ik een tijdje geleden heb gemaakt…

private static double round (double value, int precision) {
    int scale = (int) Math.pow(10, precision);
    return (double) Math.round(value * scale) / scale;
}

Antwoord 2, autoriteit 29%

probeer dit

bijvoorbeeld

DecimalFormat df = new DecimalFormat("#.##");
df.format(55.544545);

uitvoer:

55.54

Antwoord 3, autoriteit 21%

De Math.round methode retourneert een long (of een int als je een float doorgeeft), en een geheel getal van Java verdeeldheid is de boosdoener. Werp het terug naar een double, of gebruik een double letterlijke waarde bij het delen door 10. Ofwel:

double total = (double) Math.round((num / sum * 100) * 10) / 10;

of

double total = Math.round((num / sum * 100) * 10) / 10.0;

Dan zou je

. moeten krijgen

27.3

Antwoord 4, autoriteit 18%

Double toBeTruncated = new Double("2.25");
Double truncatedDouble = new BigDecimal(toBeTruncated).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();

het geeft 2,3 terug


Antwoord 5, autoriteit 12%

Als je deze en soortgelijke handelingen vaker nodig hebt, kan het handiger zijn om de juiste bibliotheek te vinden in plaats van deze zelf te implementeren.

Hier zijn oneliners die uw vraag uit Apache Commons Math oplossen met behulp van Precisie, Colt met behulp van Functies en Weka met behulp van Hulpprogramma’s:

double value = 540.512 / 1978.8 * 100;
// Apache commons math
double rounded1 = Precision.round(value, 1);
double rounded2 = Precision.round(value, 1, BigDecimal.ROUND_HALF_UP);
// Colt
double rounded3 = Functions.round(0.1).apply(value)
// Weka
double rounded4 = Utils.roundDouble(value, 1)

Maven-afhankelijkheden:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.5</version>
</dependency>
<dependency>
    <groupId>colt</groupId>
    <artifactId>colt</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>nz.ac.waikato.cms.weka</groupId>
    <artifactId>weka-stable</artifactId>
    <version>3.6.12</version>
</dependency>

Antwoord 6, autoriteit 5%

Een leuk alternatief dat naar mijn mening veel leesbaarder is, maar waarschijnlijk een tikkeltje minder efficiënt vanwege de conversies tussen double en String:

double num = 540.512;
double sum = 1978.8;
// NOTE: This does take care of rounding
String str = String.format("%.1f", (num/sum) * 100.0); 

Als je het antwoord als een dubbel wilt, kun je het natuurlijk terug converteren:

double ans = Double.parseDouble(str);

Antwoord 7, autoriteit 3%

Uw methode is juist, het enige wat u hoeft te doen is een .0 toevoegen na beide tientallen en het zal uw probleem oplossen!

double example = Math.round((187/35) * 10.0) / 10.0;

De uitvoer zou zijn:

5.3

Antwoord 8, autoriteit 3%

DecimalFormat decimalFormat = new DecimalFormat(".#");
String result = decimalFormat.format(12.763);                // -->  12.7

Antwoord 9, autoriteit 3%

Double number = new Double("5.25");
Double tDouble = 
  new BigDecimal(number).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();

dit levert 5,3 op

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes