"%.3f".format(1)
은 1.000
을 반환합니다.
"%.3f".format(4.0/3.0)
은 1.333
을 반환합니다.스칼라에서 문자열 서식 지정 - 최대 십진수 정밀도
반품 할 수있는 쉬운 방법이 있습니까 1
및 1.333
? 난 표준 printf
형식이 이미 최대로 정밀도를 지정했지만 분명히 스칼라에서는 그렇지 않다고 생각했습니다.
"%.3f".format(1)
은 1.000
을 반환합니다.
"%.3f".format(4.0/3.0)
은 1.333
을 반환합니다.스칼라에서 문자열 서식 지정 - 최대 십진수 정밀도
반품 할 수있는 쉬운 방법이 있습니까 1
및 1.333
? 난 표준 printf
형식이 이미 최대로 정밀도를 지정했지만 분명히 스칼라에서는 그렇지 않다고 생각했습니다.
의 printf 사용하는 기본 포맷은 [DecimalFormat][1]
에 비해 모두 같은 지원이없는 일반적인 하나가 될 것으로 보인다. 당신은 그 라인을 따라 사용자 정의 포맷터를 인스턴스화 할 수 있습니다 :
scala> import java.text.DecimalFormat
import java.text.DecimalFormat
scala> val formatter = new DecimalFormat("#.###")
formatter: java.text.DecimalFormat = [email protected]
scala> formatter.format(1)
res36: java.lang.String = 1
scala> formatter.format(1.34)
res37: java.lang.String = 1.34
scala> formatter.format(4.toFloat/3)
res38: java.lang.String = 1.333
scala> formatter.format(1.toFloat)
res39: java.lang.String = 1
참조 : http://docs.oracle.com/javase/tutorial/java/data/numberformat.html을 자세한 내용은.
"%.3f".format(1)
때문에 잘못된 유형의 java.util.IllegalFormatConversionException
가 발생합니다 (Float
이 예상되는 당신은 Int
을 제공).
"%.3f".format(1.0)
을 사용하는 경우에도 1.000
이 표시됩니다.
당신은 같은 방법을 사용할 수있는 예상 된 결과 얻으려면 다음
def format(x:AnyVal):String = x match {
case x:Int => "%d".format(x)
case x:Long => "%d".format(x)
case x:Float => "%.3f".format(x)
case x:Double => "%.3f".format(x)
case _ => ""
}
이 방법은 인수 유형에 따라 예상되는 형식을 반환됩니다.
1.0f에 대해 여전히 "1.000"을 반환합니다 –
형식을 지정하면 간단히 제로를 제거하는 방법은 무엇입니까?
scala> Array(1.0,1.10,1.110).map("%.3g" format _).map(_.replaceAll("[.0]*$",""))
res7: Array[java.lang.String] = Array(1, 1.1, 1.11)
로케일을 사용하여 소수점으로 사용할 항목을 선택하기 때문에 조심하십시오 . 그리고 그것은 ','이 아니라 ''일지도 모릅니다. – Heptic
스칼라는 일반적인 자바 포맷을 사용하기 때문에 스칼라에만 국한되지는 않습니다. 문자열 서식 지정에 대한 자세한 내용은 http://download.oracle.com/javase/7/docs/api/java/util/Formatter.html을 참조하십시오. –
' "% .3f".format (1)'은 1.000을 반환하지 않지만 실패합니다. ' "% .3f".format (1.0)'또는 1f가 필요합니다. 그렇지 않으면 java.util.IllegalFormatConversionException이 발생합니다 : f! = java.lang.Integer' –