Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android BigDecimal.doubleValue不存在?_Android_Kotlin - Fatal编程技术网

Android BigDecimal.doubleValue不存在?

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

我正试图找到一种简单的方法,将一个双精度整数舍入到小数点后两位。我使用BigDecimal来实现这个技巧,但是注意到java.math.BigDecimal类的函数不存在

以下功能:

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)