将字符串转为Double时toDouble()自动省略末尾0的问题求助
问题解决:字符串转Double后末尾0丢失的处理
问题原因
Double是浮点数类型,仅存储数值大小,不保留小数位数的格式信息。1.3和1.30在数值上完全等价,因此调用toDouble()转换后,会自动省略末尾无意义的0。
解决方案
根据你的需求场景,可选以下几种处理方式:
直接返回格式化后的字符串(最简便)
你已经通过String.format("%02d.%02d", ...)生成了带两位小数的字符串,直接返回该字符串即可保留1.30的格式,无需转成Double:val value = String.format( "%02d.%02d", TimeUnit.MILLISECONDS.toHours(milli) % 24, TimeUnit.MILLISECONDS.toMinutes(milli) % 60 ) return value用BigDecimal替代Double保留格式信息
如果必须返回数值类型,使用BigDecimal可以保留字符串中的小数位数细节:val value = String.format( "%02d.%02d", TimeUnit.MILLISECONDS.toHours(milli) % 24, TimeUnit.MILLISECONDS.toMinutes(milli) % 60 ) return BigDecimal(value)后续需要展示时,可再通过
BigDecimal的格式化方法输出指定小数位数。返回Double但展示时重新格式化
若一定要返回Double类型,在需要显示结果的环节,重新对Double值做格式化处理:// 先转成Double val doubleValue = value.toDouble() // 展示时格式化 val displayValue = String.format("%.2f", doubleValue) // 得到"1.30"
内容的提问来源于stack exchange,提问作者Saurabh G.
相关产品推荐
相关产品推荐

