2014-10-08 2 views
2

쉼표가 제거 된 것처럼 float를 int로 변환해야합니다. 예 : 23.2343f -> 232,343자바를 띄우고 쉼표를 제거합니다.

private static int removeComma(float value) 
{ 
    for (int i = 0; ; i++) { 
     if((value * (float)Math.pow(10, i)) % 1.0f == 0.0f) 
      return (int)(value * Math.pow(10, i)); 
    } 
} 

문제는 수의 반올림으로합니다. 예를 들어 23000.2359f를 전달하면 입력이 23000.236으로 반올림되므로 23000236이됩니다.

+1

'(int * (value * 10000f)'또는'Math.floor (value * 10000f)'를 사용할 수 없습니까? – OldCurmudgeon

답변

7

자바 플로트는

23000.236 

원하는 출력을 얻으려면, 당신은 double

처럼 사용할 수있는 출력

float f = 23000.2359f; 
System.out.println(f); 

으로 볼 수있는 많은 정밀도를 가지고 있지 않습니다

double d = 23000.2359; 
String v = String.valueOf(d).replace(".", ""); 
int val = Integer.parseInt(v); 
System.out.println(val); 

출력이 (요청 됨)

230002359 
+0

좋은 대안. 오류없이 얼마나 많은 자릿수가 작동하는지 대답에 추가 할 수 있습니다. 나는 그것이 15 또는 16이라고 생각한다. – UniversE

+0

그것들은 꽤 좋지만, 숫자 뒤에 e가 있다면 어떻게 될까? (2343.4323e2 -> 23434323e2 -> Integer.parseInt 예외) –

+0

@RandomNoob 그런 다음 질문에 게시 한 알고리즘을 사용해야합니다. 그러나 당신이 할 수없는 것은,'double'과'float'가 무한한 정밀도를 가지고 있다고 가정하는 것입니다. –

-3

소수점 이하 자릿수를 얻는 방법을 찾아야합니다. n이라고 가정합니다. 그 숫자를 10 배로 곱하면됩니다.

double d= 234.12413; 
String text = Double.toString(Math.abs(d)); 
int integerPlaces = text.indexOf('.'); 
int decimalPlaces = text.length() - integerPlaces - 1; 
+0

간단한 질문 : 왜? – BackSlash

관련 문제