Android Kotlin 将两个 Double 类型数字相除会产生不正确的结果,精度很差

问题描述

在划分两个双数类型时遇到问题。我追求的是精确值,因此舍入并不是真正可取的。

我有一个 UI 字段,其中提取由“值”变量表示的数据,并将其除以另一个值以获得准确的百分比。第一行是我打算使用其余的我正在试验的调试输出。正确答案是 0.109*,我似乎只有在直接赋值而不是从变量赋值时才能得到正确答案。

data.used = (value.text.toString().todouble() / data.value)
var n1: Double = value.text.toString().todouble()
var d1: Double = data.value
var n: Double = 120.0
var d: Double = 1100.0
Log.d("TEST","n1($n1)/d1($d1) = ${n1/d1} ")
Log.d("TEST","n1($n1)/d1($d1) = ${n1.div(d1)} ")
Log.d("TEST","n($n)/d($d) = ${n/d} ")
Log.d("TEST","n1($n1)/d($d) = ${n1/d} ")

这是 logcat 输出

D/测试:n1(120.0)/d1(1110.0) = 0.10810810810810811

D/测试:n1(120.0)/d1(1110.0) = 0.10810810810810811

D/测试:n(120.0)/d(1100.0) = 0.10909090909090909

D/测试:n1(120.0)/d(1100.0) = 0.10909090909090909

看来来自 a 类的值是罪魁祸首。我无法通过重新分配或其他方式使用 data.value 成员。

知道为什么会这样吗?

解决方法

不知道data.value甚至是什么;这可能是 int 上下文中的 float 划分 - 其中 var d1: Double = data.value 可能需要显式转换。如果您需要比 float / double 所能提供的精度更高的精度,请转换为并使用 java.math.BigDecimal