Een dubbel afronden om het in een INT (JAVA)

Op dit moment probeer ik dit:

int a = round(n);

Waar nis een doublemaar het werkt niet. Wat doe ik verkeerd?


Antwoord 1, Autoriteit 100%

Wat is het retourtype van de round()-methode in het fragment?

Als dit de Math.round()-methode is, retourneert het lang wanneer de invoerparam dubbel is.

U moet de retourwaarde uitgeven:

int a = (int) Math.round(doubleVar);

Antwoord 2, Autoriteit 12%

Als u niet van Math.Round houdt .Round () U kunt deze eenvoudige aanpak ook gebruiken:

int a = (int) (doubleVar + 0.5);

Antwoord 3, Autoriteit 4%

Afronding Dubbel naar het “dichtstbijzijnde” Integer zoals deze:

1.4 – & GT; 1

1.6 – & GT; 2

-2.1 – & GT; -2

-1.3 – & GT; -1

-1,5 – & GT; -2

private int round(double d){
    double dAbs = Math.abs(d);
    int i = (int) dAbs;
    double result = dAbs - (double) i;
    if(result<0.5){
        return d<0 ? -i : i;            
    }else{
        return d<0 ? -(i+1) : i+1;          
    }
}

U kunt de voorwaarde (resultaat & lt; 0,5) wijzigen zoals u verkiest.


Antwoord 4, Autoriteit 2%

De Math.Round-functie is overbelast
Wanneer het een float-waarde ontvangt, geeft het u een int. Dit zou bijvoorbeeld werken.

int a=Math.round(1.7f);

Wanneer het een dubbele waarde ontvangt, geeft het u lang, daarom moet u het typen om het te typen.

int a=(int)Math.round(1.7);

Dit gebeurt om verlies van precisie te voorkomen. Je dubbele waarde is 64bit, maar dan kan je INT-variabele slechts 32bit opslaan, dus het converteert het gewoon tot lang, wat 64bit is, maar je kunt het typen tot 32bit zoals hierboven uitgelegd.


Antwoord 5

import java.math.*;
public class TestRound11 {
  public static void main(String args[]){
    double d = 3.1537;
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
    // output is 3.15
    System.out.println(d + " : " + round(d, 2));
    // output is 3.154
    System.out.println(d + " : " + round(d, 3));
  }
  public static double round(double d, int decimalPlace){
    // see the Javadoc about why we use a String in the constructor
    // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
    BigDecimal bd = new BigDecimal(Double.toString(d));
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
  }
}

Antwoord 6

Documentatie van Math.roundZEGT:

Retourneert het resultaat van het afronden van het argument voor een geheel getal . Het resultaat
is gelijk aan (int) Math.floor(f+0.5).

Niet nodig om naar intte werpen. Misschien is het van het verleden veranderd.


Antwoord 7

public static int round(double d) {
    if (d > 0) {
        return (int) (d + 0.5);
    } else {
        return (int) (d - 0.5);
    }
}

Antwoord 8

U moet echt een meer compleet voorbeeld plaatsen, zodat we kunnen zien wat u probeert te doen. Van wat je hebt gepost, hier is wat ik kan zien. Ten eerste is er geen ingebouwde round()-methode. U moet ofwel bellen met Math.round(n), of statisch importeren Math.round, en bel het als u.

Other episodes