double类型转字符串如何保留原有末尾存在的0
核心原因
double属于浮点类型,内部采用二进制存储,不会记录小数点后末尾0的数量。1.1和1.10在double变量中是完全相同的二进制值,没有任何区别,因此直接从double类型转字符串不可能还原出原始的末尾0信息。
可行解决方案
- 方案1:改用
decimal类型存储数值
如果你的原始数值是从字符串解析得到的,直接解析为decimal类型即可,decimal会保留原始的精度信息,调用默认ToString()方法就能输出包含原有末尾0的结果:
# 从原始字符串解析为decimal类型 $d1 = [decimal]::Parse("1.1") $d1.ToString() # 输出结果:1.1 $d2 = [decimal]::Parse("1.10") $d2.ToString() # 输出结果:1.10
- 方案2:额外存储原始小数位数
如果必须使用double类型存储数值,你需要额外记录原始数值的小数位数,动态生成格式化字符串:
# 示例:原始小数位数为1位时 $format = "##." + '0' * 1 (1.1).ToString($format) # 输出 1.1 # 示例:原始小数位数为2位时 $format = "##." + '0' * 2 (1.1).ToString($format) # 输出 1.10
原有方法问题说明
你之前使用的ToString('##.00')是固定保留2位小数的格式化规则,不管原始数值的小数位数是多少,都会自动补0到2位,因此无法区分原始末尾是否带0。
内容的提问来源于stack exchange,提问作者Andriy Pasternak
相关产品推荐
相关产品推荐

