Domanda

Secondo Wikipedia quando si arrotonda un numero negativo, si arrotonda il numero assoluto. Quindi, con questo ragionamento, -3,5 verrebbe arrotondato a -4. Ma quando uso java.lang.Math.round (-3.5) restituisce -3. Qualcuno può spiegare questo?

È stato utile?

Soluzione

Secondo javadoc

  

Restituisce il long più vicino a   discussione. Il risultato è arrotondato a un   intero aggiungendo 1/2, prendendo il   piano del risultato e lancio del file   risultato per digitare long. In altre parole,   il risultato è uguale al valore di   l'espressione:

     

(long) Math.floor (a + 0.5d)

Concettualmente, arrotondate su . In altre parole, al prossimo intero maggiore del valore e -3 è maggiore di -3,5, mentre -4 è inferiore.

Altri suggerimenti

Esistono vari metodi di arrotondamento; quello che stai guardando si chiama Symmetrical Arithmetic Rounding (come afferma). La sezione a cui ti riferisci afferma: "Questo metodo è comunemente usato in applicazioni matematiche, ad esempio in contabilità. È quello generalmente insegnato nelle classi di matematica elementari. & Quot; Ciò sembra riconoscere che non è una regola concordata a livello globale, ma solo quella più comune.

Personalmente, non ricordo di aver mai insegnato questa regola a scuola. La mia comprensione dell'arrotondamento è sempre stata che 0,5 è arrotondato per eccesso, indipendentemente dal segno del numero. Apparentemente gli autori di Java hanno la stessa comprensione. Questo è arrotondamento aritmetico asimmetrico.

Strumenti e lingue diversi utilizzano potenzialmente schemi di arrotondamento diversi. Excel apparentemente usa il metodo simmetrico.

(Nel complesso, consiglierei che se trovi un conflitto tra Wikipedia ed esperienza, cerchi informazioni altrove. Wikipedia non è perfetta.)

Per quello che vale, java.math.BigDecimal ha modalità di arrotondamento selezionabili se hai bisogno di un maggiore controllo su quel genere di cose.

L'articolo di Wikipedia che citi non dice che è l'unico modo per arrotondare, solo il modo comune per arrotondare. In quell'articolo sono anche menzionate diverse alternative (sfortunatamente nessuna delle quali descrive il metodo di arrotondamento di Java - anche se lo chiamano "arrotondamento aritmetico asimmetrico" quando indicano cosa fa JavaScript).

Devi decidere come desideri arrotondare i tuoi numeri, quindi utilizzare quel metodo. Se l'implementazione di Java corrisponde, allora grande. altrimenti dovrai implementarlo da solo.

Secondo Javadocs:

Restituisce il long più vicino all'argomento. Il risultato viene arrotondato a un numero intero aggiungendo 1/2, prendendo la base del risultato e lanciando il risultato per digitare long . In altre parole, il risultato è uguale al valore dell'espressione:      

(long)Math.floor(a + 0.5d)

Si scopre che la convenzione è di arrotondare. Immagino che Wikipedia sia fallibile. Si scopre che Microsoft ha sbagliato, anche se lo arrotondano a -4, il che non è una convenzione (ho verificato con qualcuno che ha un dottorato in matematica).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top