有没有可以截断或舍入双精度数的函数?在代码中的某一点上,我希望将类似:1.23456789的数字四舍五入为1.23
发布于 2012-06-20 02:22:28
您可以使用scala.math.BigDecimal
BigDecimal(1.23456789).setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble不幸的是,目前(尽管是their Java equivalents are)还没有很好的文档记录,还有许多其他的rounding modes。
发布于 2012-06-20 02:56:22
这是另一个不使用BigDecimals的解决方案
截断:
(math floor 1.23456789 * 100) / 100圆形:
(math rint 1.23456789 * 100) / 100或者对于任何双精度n和精度p:
def truncateAt(n: Double, p: Int): Double = { val s = math pow (10, p); (math floor n * s) / s }对于四舍五入函数也可以执行类似的操作,这次使用currying:
def roundAt(p: Int)(n: Double): Double = { val s = math pow (10, p); (math round n * s) / s }哪一个更可重用,例如,当舍入金额时,可以使用以下内容:
def roundAt2(n: Double) = roundAt(2)(n)发布于 2013-01-11 04:02:52
由于还没有人提到%运算符,下面就来看一下。它只进行截断,您不能依赖返回值来避免浮点错误,但有时它很方便:
scala> 1.23456789 - (1.23456789 % 0.01)
res4: Double = 1.23https://stackoverflow.com/questions/11106886
复制相似问题