我需要格式化这个变量:
val value = 3.2202
这样的数字:3.2
我怎样才能在scala中创建它? 我不想要字符串或println ......我需要另一个带有1位小数的浮点变量。
答案 0 :(得分:2)
val floatVal = BigDecimal(3.2202).setScale(1, BigDecimal.RoundingMode.HALF_DOWN).toFloat
答案 1 :(得分:2)
在这样的数字中:3.2 ...我需要另一个带有1位小数的浮点变量。
这是不可能的:除了something.5
之外,没有带有1位十进制数的浮点数。有一个打印的浮动为3.2(而Tzach Zonar的答案解释了如何获得它),但它实际上是3.2000000476837158203125
。如果要准确表示十进制数,请使用BigDecimal
;这就是它的用途。
你可以阅读,例如http://floating-point-gui.de/了解“浮点”的含义以及为什么3.2不能表示为二进制浮点数(float
,double
或更高的精度)。
答案 2 :(得分:1)
这会成功吗?
scala> val value = 3.2202
value: Double = 3.2202
scala> val newVal = (value * 10).toInt / 10F
newVal: Float = 3.2
答案 3 :(得分:0)
使用scala f
插值器,然后执行toFloat
val value = 3.2202
val str = f"$value%.1f"
val result = str.toFloat
Scala REPL
scala> val value = 3.2202
value: Double = 3.2202
scala> val str = f"$value%.1f"
str: String = 3.2
scala> val result = str.toFloat
result: Float = 3.2
1
之后 .
在点后只考虑value
的小数部分
Scala REPL
scala> val value = 3.2202
value: Double = 3.2202
scala> f"$value%.1f"
res0: String = 3.2
scala> f"$value%.2f"
res1: String = 3.22
scala> f"$value%.3f"
res2: String = 3.220
scala> f"$value%.4f"
res3: String = 3.2202
以下输出很重要。请注意,它最后会增加0。
scala> f"$value%.5f"
res4: String = 3.22020