2015-12-19 21 views
5

Mam ogromne podwójne, że chcę uzyskać pierwsze 2 cyfry dziesiętne jako pływające z. Oto przykład:Java otrzymuje pierwsze 2 cyfry dziesiętne podwójnego

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

wyjściowa: 36

Jeśli nie zrozumieć krępuj się zadawać pytania.

+0

pokaż implementację 'magicFunction' – Ramanlfc

+0

Czy potrzebujesz" tylko "pierwszych 2 liczb i zapisać go jako float (lub) ze swojego przykładu czy potrzebujesz swojej wydajności jako 36.843871? –

+0

Potrzebuję pływaka bez cyfr i cyfr dziesiętnych. – ThatPixelCherry

Odpowiedz

6

Można mnożyć przez 100 i używać Math.floor(double) jak

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

otrzymuję (żądana)

36 

Zauważ, że jeśli używasz float, wtedy można uzyskać 36.0.

+0

Awesome! Właśnie tego szukałem. Dzięki: D – ThatPixelCherry

+5

Jeśli x jest większe niż 1, otrzymasz odpowiedź z więcej niż 2 cyframi. –

+1

'x% 1d * 100', jeśli jest większe niż 1 – WalterM

3

Możesz pomnożyć liczbę x przez 100 i użyć zamiast niego wartości int. Próbowałem poniższy kod:

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

I got wyjście jak:

36 
2

w przypadku gdy x jest większy niż 1 i negatywne:

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

Zwroty 36. Pierwsze dwie cyfry to 23. – EJP

+0

Ok dostałem i edytowałem. dzięki @EJP. – snvrthn

+0

A teraz, jaki jest dokładnie punkt pomnożenia zera przez 100? – EJP

2

obsłużyć negatywny przypadek i wszystkie zakresy poprawnie:

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

Potrzebujesz również h andle zero poprawnie, nie pokazano.