C# 如何为数字字符串插入小数点保留两位小数 解决计算结果异常问题
问题原因
C#中两个int类型值执行除法时默认走整数截断逻辑,会直接丢弃小数部分,你代码里attrval是int类型、100也是int类型,所以504 / 100的运算结果直接是int类型的5,后续格式化自然只能得到5.00的结果。
解决方案
只需要把除法的其中一个操作数改为非整数类型,让运算走浮点数/高精度小数除法即可,推荐用decimal类型处理金额类高精度要求的场景,避免浮点精度丢失:
- 方案1:用decimal后缀标记除数
int attrval = Convert.ToInt32("000504"); // 100后面加m表示这是decimal类型的数值,运算时attrval会自动隐式转为decimal decimal val1 = attrval / 100m; string val2 = String.Format("{0:0.00}", attrval / 100m); // 也可以用更简洁的字符串插值写法 string val3 = $"{attrval / 100m:0.00}";
运行后val1为5.04,val2和val3均为字符串"5.04",符合预期。
- 方案2:显式转换被除数为decimal,效果一致
int attrval = Convert.ToInt32("000504"); decimal val1 = (decimal)attrval / 100; string val2 = val1.ToString("0.00");
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

