在除法两个双位数类型时遇到问题。我追求的是精确的值,所以舍入是不可取的。
我有一个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
并使用。