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

厘米转米时如何去除double数值小数部分无意义末尾零?

解决C#中Double数值去除末尾无意义零的问题

你的问题核心包含两个关键点:一是浮点数精度误差导致的多余小数位(比如8.8cm转米后出现0.08800000000000001),二是去除末尾无意义的零。以下是几种实用的解决方法:

方法1:使用通用格式符G自动清理

G格式符会保留数值的有效数字,自动剔除末尾的零和不必要的小数点。针对double类型,推荐指定有效数字位数(比如G15,匹配double的实际有效精度),避免精度丢失:

public static double? ConvertCmToM(double? cm)
{
    if (!cm.HasValue) return null;
    return cm.Value * 0.01;
}

// 调用并格式化输出
var result = ConvertCmToM(8.8);
string formattedResult = result?.ToString("G15") + "m";
// 输出:0.088m

G15会保留最多15位有效数字,既不会丢失实际精度,又能自动去掉无意义的末尾零。

方法2:改用Decimal解决精度问题(推荐)

double的二进制存储特性导致部分十进制小数无法精确表示,进而产生计算误差。改用decimal类型做计算可以彻底避免这类问题,再配合字符串格式化就能得到干净的结果:

public static decimal? ConvertCmToM(decimal? cm)
{
    if (!cm.HasValue) return null;
    return cm.Value * 0.01m;
}

// 调用并格式化输出
var result = ConvertCmToM(8.8m);
string formattedResult = result?.ToString("G") + "m";
// 输出:0.088m

decimal专门用于精确的十进制计算,完全不会出现类似0.08800000000000001的误差,格式化后自然能得到预期结果。

方法3:自定义格式字符串控制

如果需要更灵活的格式控制,可以使用#占位符,它会自动忽略无意义的零:

string formattedResult = result?.ToString("#.##################") + "m";

这里的#代表可选数字位,末尾的零会被自动省略。不过这种方式需要预估最大可能的小数位数,不如G格式符省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:33