You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Double、String、Integer转换异常导致BTC汇率计算结果错误问题

问题根源

  • 现有代码的核心错误是处理usdRate时把小数点也直接移除了,比如原始usdRate为"44,950.4794",先去掉逗号得到"44950.4794",再移除小数点直接变成"449504794",转成整数后乘以0.00000001自然就得到了你看到的4.49504794,和预期逻辑完全不符。
  • 你给出的计算示例和文字描述的逻辑有冲突,以下代码统一按你明确说明的逻辑实现:用户输入值 * 0.00000001 * usdRate。

修正后代码(含usdRate长度限制)

// 1. 取出原始usdRate字符串
var usdRate: String = JSONObject(json).getJSONObject("bpi").getJSONObject("USD")["rate"] as String
// 2. 移除千位分隔符逗号
usdRate = usdRate.replace(",", "")
// 3. 实现长度限制:移除末尾4个字符,要保留总共5位数字可以替换这段逻辑
if (usdRate.length > 4) {
    usdRate = usdRate.dropLast(4)
}
// 4. 正确转为Double类型,不要移除小数点
val usdRateNum = usdRate.toDouble()
// 5. 常量定义
val satoshiUnit = 0.00000001
// 6. 取用户输入值
val ddx: EditText = findViewById(R.id.editTextNumber2)
val inputVal = ddx.text.toString().toDouble()
// 7. 按正确逻辑计算
val result = inputVal * satoshiUnit * usdRateNum
// 8. 格式化输出避免小数过长
usdView.text = "%.12f".format(result)

可选长度限制逻辑(保留总共5位数字)

如果需求是保留总共5位数字,把上面第3步的代码替换为以下内容即可:

usdRate = usdRate.replace(Regex("(\\d{5})[^\\d]*.*"), "$1")

内容的提问来源于stack exchange,提问作者AnxiousDino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:24:01