Android BigDecimal.doubleValue不存在?
我正试图找到一种简单的方法,将一个双精度整数舍入到小数点后两位。我使用BigDecimal来实现这个技巧,但是注意到java.math.BigDecimal类的函数不存在 以下功能:Android BigDecimal.doubleValue不存在?,android,kotlin,Android,Kotlin,我正试图找到一种简单的方法,将一个双精度整数舍入到小数点后两位。我使用BigDecimal来实现这个技巧,但是注意到java.math.BigDecimal类的函数不存在 以下功能: fun Double.roundTo2DecimalPlaces() = BigDecimal(this).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() 给我这个编译错误: :compileKotlin Using kotlin incre
fun Double.roundTo2DecimalPlaces() =
BigDecimal(this).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()
给我这个编译错误:
:compileKotlin
Using kotlin incremental compilation
w: The '-d' option with a directory destination is ignored because '-module' is specified
e: -{FilePathAndNameWereHere}-: (20, 14): Unresolved reference: doubleValue
:compileKotlin FAILED
Kotlin版本是1.1.1您不能改用
toDouble()
,即:
fun Double.roundTo2DecimalPlaces() =
BigDecimal(this).setScale(2, BigDecimal.ROUND_HALF_UP).toDouble()
我发现这个问题是关于如何替换Javascript`' 此方法比转换为
BigDecimal
的速度快x20,但在极端示例中会遇到浮点不准确的问题
Assert.assertEquals(4238764872.745398676, 4238764872.745398675983467.toFixed(9), 0.00000000001)
上述操作失败,但接受的答案成功(将刻度更改为参数)谢谢!;)你说对了!结果我也用错了BigDecimal。我更新了我的问题,以便正确使用BigDecimal。但留下了原问题的不正确之处。您可以编辑您的答案以反映,这样人们就不会复制损坏的代码。
setScale
函数实际上返回一个新的BigDecimal(按要求的比例)toDouble
是关键!你是老板。你对编辑你的答案以反映正确使用方法有什么看法。由于d.setScale不会改变原始对象,因此该方法不会取整。我确实尝试过进行编辑,但被社区拒绝:如果我能找到一个很好的理由,请不要介意重新接受这个答案。或者,如果代码中与问题无关的错误部分被更改,我会更加赞同我的观点。@DaveThomas同意。更新。(另外,请注意之前的错误使用setScale
)这不适用于Kotlin/JS
Assert.assertEquals(4238764872.745398676, 4238764872.745398675983467.toFixed(9), 0.00000000001)