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



在除法两个双位数类型时遇到问题。我追求的是精确的值,所以舍入是不可取的。

我有一个UI字段,其中数据由'value'变量表示,并将其除以另一个值以获得确切的百分比。第一行是我打算使用的,其余的是我正在试验的调试输出。正确答案是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/TEST: n1(120.0)/d1(1110.0) = 0.10810810810810810811

D/TEST: n1(120.0)/d1(1110.0) = 0.10810810810810810811

测试:

D/D n (120.0)/(1100.0) = 0.10909090909090909

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

似乎来自a类的值是罪魁祸首。我不能使用这些数据。通过重赋值或其他方式实现的值成员。

知道为什么会这样吗?

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

最新更新