2015-12-19 13 views
5

Ho un enorme doppio che voglio ottenere le prime 2 cifre decimali come float da. Ecco un esempio:Java ottiene le prime 2 cifre decimali di un doppio

double x = 0.36843871 
float y = magicFunction(x) 
print(y) 

uscita: 36

Se non si capisce si sentono liberi di porre domande.

+0

mostra l'implementazione 'magicFunction' – Ramanlfc

+0

hai bisogno di" solo "i primi 2 numeri e lo memorizza come float (o) dal tuo esempio hai bisogno del tuo output come 36.843871 ?? –

+0

Ho bisogno di un output float senza cifre decimali. – ThatPixelCherry

risposta

6

Si potrebbero moltiplicare per 100 e utilizzare Math.floor(double) come

int y = (int) Math.floor(x * 100); 
System.out.println(y); 

ottengo (la richiesta)

36 

Nota che se si utilizza float, allora si otterrebbe 36.0.

+0

Fantastico! Proprio quello che stavo cercando. Grazie: D – ThatPixelCherry

+5

Se x è maggiore di 1, otterrai una risposta con più di 2 cifre. –

+1

'x% 1d * 100' se maggiore di 1 – WalterM

3

È possibile moltiplicare x per 100 e utilizzare int anziché float. Ho provato il codice qui sotto

double x = 0.36843871; 
int y = (int)(x*100); 
System.out.println(y); 

e ottenuto uscita come:

36 
2

In caso x è maggiore di 1 e negativo:

double x = -31.2232; 
    double xAbs = Math.abs(x); 
    String answer = ""; 
    if((int)xAbs == 0) { 
     answer = "00"; 
    } 
    else { 
     int xLog10 = (int)Math.log10(xAbs); 
     double point0 = xAbs/Math.pow(10, xLog10 + 1); // to 0.xx format 
     answer = "" + (int)(point0 * 100); 
    } 
    System.out.println(answer); 
+0

Restituisce 36. Le prime due cifre sono 23. – EJP

+0

Ok capito e modificato. grazie @EJP. – snvrthn

+0

E ora, qual è esattamente il punto di moltiplicare lo zero per 100? – EJP

2

per gestire il caso negativo e tutti gli intervalli correttamente:

double y = Math.abs(x); 
while (y < 100) 
    y *= 10; 
while (y > 100) 
    y /= 10; 
return (float)(int)y; 

È inoltre necessario h andle zero correttamente, non mostrato.