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

Kotlin中货币值小数位末尾为0时不显示第二位小数如何解决

问题解决:Kotlin货币输出保留两位小数末尾的0

问题根源

你遇到的是数值存储和文本展示的逻辑差异问题:

  • Double是数值类型,本身只存储数学意义上的数值大小,4.5和4.50在数值上完全等价,所以不会保留末尾的0
  • 你之前的代码逻辑完全走反了:先把数值格式化成保留小数的字符串,又转回Double,相当于白做了格式化操作,转回去之后当然会丢失末尾的0

解决方法

直接在最终输出的时候做字符串格式化即可,用%.2f格式符,明确要求保留2位小数,会自动补末尾的0。

修改后的完整代码

fun main(){
    val Quarter1 = quarter()
    val Dime1 = dime()
    println("你有多少个25分硬币?")
    var quarterQuan = readLine()!!.toDouble()
    println("你有多少个10分硬币?")
    var dimeQuan = readLine()!!.toDouble()
    println("")
    println("你有 $quarterQuan 个25分硬币和 $dimeQuan 个10分硬币!")
    var quarterTotal = quarterQuan * Quarter1.quarterVal
    var dimeTotal = dimeQuan * Dime1.dimeVal
    var cashTotal:Double = quarterTotal + dimeTotal
    // 直接格式化输出,不需要转成Double
    println("你的零钱总金额是 \$ %.2f ".format(cashTotal))
}

class quarter{
    val quarterVal = .25
}

class dime{
    val dimeVal = .10
}

额外优化建议

  • 货币类计算尽量避免用Double,浮点数存在精度丢失风险,比如累计大量硬币后可能出现1.00变成0.9999999999的情况,更稳妥的做法是用分为单位的整数计算,或者用BigDecimal类型。
  • 你原来代码里的String.format("0%f", cashTotal)写法是错误的,开头多余的0会让输出结果前面多一个0,比如04.5,注意格式符的正确写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:00