5

floatString으로 변환하고 항상 지정된 길이의 결과 문자열을 얻으려면 어떻게해야합니까?float를 string으로 변환하고 항상 특정 길이의 문자열을 얻으시겠습니까?

내가

float f = 0.023f; 

을 가지고 있고 나는 6 문자열을 원하는 예를 들어, 내가 0.0230을 좀하고 싶습니다. 하지만 4 자리의 문자열로 변환하려면 결과는 0.02이어야합니다. 또한 -13.459은 5 자로 제한되며 -13.4 및 10 자 -13.459000을 반환해야합니다. 여기

내가 java.util.Formatter documentaion에서

s = String.valueOf(f); 
s = s.substring(0, Math.min(strLength, s.length())); 
if(s.length() < strLength) 
    s = String.format("%1$-" + (strLength-s.length()) + "s", s); 
+0

'java.text.DecimalFormat'을 참조하십시오. – EJP

+2

이 형식은 이상합니다 ...'100000.05'는'5'로 어떻게 제한됩니까? '10000'? *하지만 이렇게하는 것이 더 예쁘다. *'String.format ("%."+ limit + "f", f) .substring (0, limit)' – Selvin

+0

@Selvin 네, 맞습니다. 제 특정한 경우에는 제가 작업하고있는 숫자의 범위를 알기 때문에 원하는 길이를 적용 할 수 있습니다. 로깅 목적으로 LogCat의 "열"에 숫자를 출력하므로 출력 속도가 상당히 높고 부호와 소수점/자릿수가 알 수 없더라도 (그러나 특정 범위로 제한된 수의 경우에도) 읽기 쉽습니다. – BadCash

답변

3

... 지금 사용하지만, 꼭이 일을 훨씬 예뻐 방법 일 수있을거야 무엇 : 당신이 g 수정을 사용할 수 precision 필드는 특정에 수를 제한하는 문자 수 및 width 필드를 사용하여 열 너비를 채 웁니다. 계산 가수 만 자리 -


비록 precision

https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

String.format("%1$8.5g", 1000.4213); 

는 점과 지수 길이를 포함하지 않습니다.

도트에 여분의 자리를 유지하고 문자열이 상당히 넓 으면 부분 부분에서 여분의 자릿수를 잘라서 해결할 수도 있습니다.

String num = String.format("%1$ .5g", input); 
if (num.length > 6) 
    num = num.substring(0, 2) + num.substring(7); //100300 => ' 1e+05'; 512.334 => ' 512.33' 

과학 형식은 항상 규칙의 엄격한 다음, 그래서 위에 우리가 경우에 같은 기호가 항상 포함되어있는 경우 문자열에서 일부를 절단하는 문자열 내부의 점을 검색 할 (또는하지 않습니다 - 대체 양수에 대해서는 공백 문자로 표시).

관련 문제