假设我有一个十进制数列表,我必须每三个位置用逗号格式化,加上小数点后面的相应位数。我想使用.net string.Format
方法。
我希望它能像这样工作:
string format = ???;
string s1 = string.Format(format, "1500"); // "1,500"
string s2 = string.Format(format, "1500.25"); // "1,500.25"
string s3 = string.Format(format. "3.1415926358979"); // "3.1415926358979"
我已经看到其他答案,其中小数点后的数字要么限制为固定的位数,要么完全截断,但这对我的应用程序不起作用。我想在数字的整个部分添加逗号分隔符,但保持小数点后面的数字完全相同。
答案 0 :(得分:2)
第一个问题,您需要先解析字符串,然后才能格式化它们。可能会失去一些精确度。然后你需要决定你需要的最大精度。然后你可以做这样的事情:
string format = "{0:#,##0.#############}";
string s1 = string.Format(format, double.Parse("1500")); // "1,500"
string s2 = string.Format(format, double.Parse("1500.25")); // "1,500.25"
string s3 = string.Format(format, double.Parse("3.1415926358979")); // "3.1415926358979"
小数位后的#
是十进制数字的占位符。如果没有更多数字,则不会显示尾随零。
如果在转换为double
时被限制为多个小数位或可能会失去精确度。你可以像这样做一些非常狡猾的事情:
public static string DecimalFormatCludge(string original)
{
var split = original.Split('.');
return string.Join(".", (new [] { int.Parse(split[0]).ToString("#,##0")}).Concat(split.Skip(1)));
}
这将在字符串中的.
上拆分,将第一部分解析为int,将其转换回正确格式化的字符串,然后将小数部分重新打开(如果有的话)
答案 1 :(得分:0)
这样的事情?
string s1 = format.ToString("#,##0.00");
答案 2 :(得分:0)
格式是这样的:
string format = "{0:#,##.##################}";