Sto usando java.util.Random per generare un gaussiano casuale. Devo convertire questo gaussiano in un valore float. Comunque il gaussiano è un doppio, quindi ho bisogno di un modo per arrotondare e poi convertirlo in un float. Devo arrotondare al numero intero più vicino, arrotondando per eccesso. Ecco la mia domanda: come?Come arrotondare il doppio al numero intero più vicino e poi convertirlo in float?
risposta
float b = (float)Math.ceil(a);
o float b = (float)Math.round(a);
A seconda se si intende "arrotondare al numero intero più vicino" (tondo) o "arrotondare" (ceil).
Attenzione alla perdita di precisione nella conversione di un doppio in un float, ma non dovrebbe essere un problema qui.
Grazie per la risposta, esattamente quello che stavo chiedendo per – JAW1025
Ecco un breve esempio:
public class One {
/**
* @param args
*/
public static void main(String[] args) {
double a = 4.56777;
System.out.println(new Float(Math.round(a)));
}
}
il risultato e uscita sarà: 5.0
Float limite superiore più vicino al valore iniziale di double a = 4.56777
in questo caso l'uso del turno è raccomandato poiché contiene valori double
e fornisce valori interi long
R egards
'(float) Math.round (a)' è molte volte più efficiente sia nel tempo che nello spazio. – EJP
concordato. Si dovrebbe usare 'Float a = new Float (" 3.14 ")' solo quando è necessario accedere ai metodi ereditati dell'oggetto Super-class, come 'clone, toString, equals' e così via. 'float a = (float) 3.14;' si comporta molto male in un approccio OOP. – VeRo
Non so cosa abbia a che fare con 'Float a = new Float (" 3.14 ")'. Né l'OP né io né voi avete detto nulla a riguardo, né a proposito di OOP. – EJP
Per ciò che vale:
il numero intero più vicino a qualsiasi ingresso come mostrato nella tabella seguente può essere calcolata utilizzando Math.ceil o Math.floor a seconda della distanza tra l'ingresso e l'intero successivo
+-------+--------+
| input | output |
+-------+--------+
| 1 | 0 |
| 2 | 0 |
| 3 | 5 |
| 4 | 5 |
| 5 | 5 |
| 6 | 5 |
| 7 | 5 |
| 8 | 10 |
| 9 | 10 |
+-------+--------+
private int roundClosest(final int i, final int k) {
int deic = (i % k);
if (deic <= (k/2.0)) {
return (int) (Math.floor(i/(double) k) * k);
} else {
return (int) (Math.ceil(i/(double) k) * k);
}
}
"ho bisogno di convertire questo gaussiana a un valore float." ... "Devo arrotondare al numero intero più vicino" ... Vuoi un float o un intero? –
Vuoi arrotondare o vuoi arrotondare al numero intero più vicino? –
Vuoi arrotondare il numero intero più vicino o arrotondare? Quelle sono dichiarazioni incompatibili. per esempio. Come faresti circolare 3.4? Il numero intero più vicino è 3, arrotondando per eccesso è 4. – user949300