我是Scala的新手,我试图编写一个函数,该函数接受一个double和一个整数作为输入,并以小数点后的精度返回double值。
tall_unanswered <- foobar %>% select(ends_with("unanswered"), month) %>%
gather(key = tag, value = count, -month)
tall_total <- foobar %>% select(-ends_with("unanswered")) %>%
gather(key = tag, value = count, -month)
p <- ggplot(tall_total, aes(x = month, y = count, color = tag)) +
geom_line() +
geom_line(data = tall_unanswered, linetype = "dashed")
我的输入是1.140060000,我期望输出是1.14006,但是返回1.140060000。 5个精度点后不考虑0。
答案 0 :(得分:0)
双打不存储精度;它们都具有完全相同的精度。而且它们也是二进制的,因此它们可能与它们来自的BigDecimal
不完全匹配。如果您需要保留该精度信息,建议您将其保留为BigDecimal
,甚至将其转换为String
。
答案 1 :(得分:0)
首先,当我在repl中编译您的代码段时,会引发编译错误。
BigDecimal.(d)
->语法错误。应该是BigDecimal(d)
在我编译并运行代码后对其进行更正后,它会提供正确的输出。
scala> def decimal_value(d: Double, p: Integer) :
| Double = {
| if (d >= 0) {
| BigDecimal(d).setScale(p, BigDecimal.RoundingMode.HALF_UP).toDouble
| }
| else
| d
| }
decimal_value: (d: Double, p: Integer)Double
scala> decimal_value(1.140060000, 5)
res4: Double = 1.14006
答案 2 :(得分:0)
1.140060000
和1.14006
是相同的数字,因此看起来这个问题是关于在打印出值时显示值的方式。在此toString
上调用Double
会得到“ 1.14006”,这正是您想要的,因此不清楚为什么会得到“ 1.140060000”
您可以使用字符串格式化操作来确保获得所需的特定输出:
val str = f"$d7.1f"