如何在scala中格式化float变量?

时间:2016-10-25 14:33:24

标签: scala

我需要格式化这个变量:

val value = 3.2202 

这样的数字:3.2

我怎样才能在scala中创建它? 我不想要字符串或println ......我需要另一个带有1位小数的浮点变量。

4 个答案:

答案 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不能表示为二进制浮点数(floatdouble或更高的精度)。

答案 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