C#如何将API返回的整数金额转换为decimal/double格式实际金额
C# 整数金额转实际decimal金额实现方案
你拿到的整数本质是以分为单位的金额值,只需做除以100的精度处理即可实现转换,以下是两种常用实现方式:
方式1:直接算术运算(最简便)
用带m后缀的decimal字面量做除数,避免整数除法丢精度、浮点运算出误差的问题:
// api返回的整型金额(单位:分) int apiReturnAmount = 90002; // 转换为实际金额(单位:元) decimal realAmount = apiReturnAmount / 100m; // 如需固定两位小数的展示字符串,可直接格式化 string displayAmount = realAmount.ToString("0.00");
测试用例对应结果:
- 输入
850→ 输出8.50 - 输入
8500→ 输出85.00 - 输入
90002→ 输出900.02 - 输入
136789→ 输出1367.89
方式2:扩展方法封装(适合多场景复用)
如果项目中多处需要用到该转换逻辑,可以封装成通用扩展方法:
public static class AmountConvertExtension { // 兼容int类型金额 public static decimal ToActualAmount(this int centAmount) { return centAmount / 100m; } // 兼容大金额long类型 public static decimal ToActualAmount(this long centAmount) { return centAmount / 100m; } // 直接返回两位小数的展示字符串 public static string ToActualAmountString(this int centAmount) { return centAmount.ToActualAmount().ToString("0.00"); } } // 调用示例 int amount = 136789; decimal result = amount.ToActualAmount(); // 输出1367.89 string display = amount.ToActualAmountString(); // 输出"1367.89"
注意:禁止直接用
100或者100.0做除数,前者会触发整数除法丢失小数位,后者是double类型运算,可能出现浮点精度误差。
内容的提问来源于stack exchange,提问作者philipcode
相关产品推荐
相关产品推荐

