android - 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
java.math.BigDecimal
float
double
推荐阅读
- tensorflow - 如何使用 tensor2tensor 的蒸馏.py 将知识从教师网络提炼到学生网络?
- python - PyCharm:将 numpy 导入为 np 未注册。
- c - 从 64 位值中获取最后两个字节
- c++ - 为什么 c++ std::string.length() 在 VS2017 上比 strlen() 慢?
- vuex - Vuex $state 从调试器正确评估,但在执行时抛出
- machine-learning - “normalize”和“Normalizer”之间的特征缩放差异
- java - 比较 Java 列表向量
- python - Pandas Grouping - 组内组的行数
- amazon-web-services - 不使用主键的 AppSync 解析器查询表/二级索引
- asterisk - 我想解决在 Asterisk sip 服务器上发生的错误