首页 > 解决方案 > 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 成员。

知道为什么会这样吗?

标签: androidkotlinprecisiondivide

解决方案


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


推荐阅读