.NET中如何不做类型转换将字符串格式化保留小数点后2位
问题原因
String.Format(Data[i].Number, "%.2f")写法无法生效有两个明确问题:
String.Format的参数顺序错误,该方法第一个参数必须是格式模板,待格式化的对象要放在模板参数之后%.2f是C系printf风格的格式化语法,.NET复合格式不支持该写法,且调用格式化方法本质会隐式将字符串转为数值类型处理,不符合「不做原始值解析/类型转换、结果保持String类型」的要求
符合要求的实现方案
因为要求全程不做类型转换,直接基于字符串规则做截断处理即可,不需要引入任何数值类型解析逻辑:
public static string KeepTwoDecimalPlaces(string rawNumberStr) { if (string.IsNullOrEmpty(rawNumberStr)) return "0.00"; int dotPosition = rawNumberStr.IndexOf('.'); // 原始字符串无小数点,直接补.00 if (dotPosition == -1) return $"{rawNumberStr}.00"; // 小数点后不足2位,补0到2位 if (rawNumberStr.Length - dotPosition - 1 < 2) return rawNumberStr.PadRight(dotPosition + 3, '0'); // 小数点后位数≥2,直接截取到小数点后2位,无任何类型转换操作 return rawNumberStr.Substring(0, dotPosition + 3); }
针对给出的测试值224.39000000000001,传入原始字符串调用方法后会直接返回"224.39",全程仅做字符串查找、截取、补全操作,没有对原始值做任何数值类型解析或转换,输入输出均为String类型。
- 兼容边界场景:
- 传入整数字符串如
"123",返回"123.00" - 传入小数点后1位的字符串如
"123.4",返回"123.40" - 传入小数点后超过2位的字符串如
"123.45678",返回"123.45"
- 传入整数字符串如
内容的提问来源于stack exchange,提问作者user18810119
相关产品推荐
相关产品推荐

