在C#中实现复杂的数字格式的最佳方法
|
在C#中复制此类行为的最佳方法是什么?
// Converts decimal to a 0-padded string with minimum specified width and precision.
sprintf(out, \"%0*.*lf\", width, precision, decimal);
我读过标准,自定义和复合格式的字符串,但是看不到任何实现此目的的好方法。
我问的原因是,我只是在某些代码中碰到了这个丑陋的代码片段,我维护着这些代码,我们需要根据外部接口指定的可变宽度和精度来格式化一串小数:
private static String ZEROS = \"00000000000000000000000000\";
public override string Format(decimal input, int width, int precision)
{
String formatString = ZEROS.Substring(0, width - precision - 1)
+ \".\" + ZEROS.Substring(0, precision);
return ToDecimal(input).ToString(formatString);
}
我想用稍微可怕的东西代替它。
更新
由于最终答案已包含在注释中,因此它是:
public override string Format(decimal input, int width, int precision)
{
string.Format(\"{0,\" + width + \":F\" + precision + \"}\", input).Replace(\" \",\"0\");
}
在我的情况下,输入始终为正,因此也可以:
public override string Format(decimal input, int width, int precision)
{
return input.ToString(\"F\"+precision).PadLeft(width, 0);
}
没有找到相关结果
已邀请:
5 个回复
厢界山攀
或者,根据您的喜好,而不是两次调用format,只需连接格式字符串即可:
之后,您必须替换空格,因为无法指定填充字符。或者,您可以编写自己的格式化程序以填充特定字符。这虽然有效:) 编辑:除all6 matches以外,这与所有输入的原稿都匹配。在这种情况下,原件是不正确的,因为即使它不存在,它也会将小数点作为宽度的一部分。 糟糕:忘记检查负数。 这是一个简单的版本,但必须检查数字是否为负数才能正确填充:
蕾跨立锌煤
? 编辑:手动,这是一个更好的选择:
授巨
不知道您是否还能做其他事情。
疼嘶桐
耐钨徒