如何使用String.Format格式化带逗号分隔符和浮点小数点的数字?

时间:2016-08-17 19:26:13

标签: c# string string-formatting

假设我有一个十进制数列表,我必须每三个位置用逗号格式化,加上小数点后面的相应位数。我想使用.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"

我已经看到其他答案,其中小数点后的数字要么限制为固定的位数,要么完全截断,但这对我的应用程序不起作用。我想在数字的整个部分添加逗号分隔符,但保持小数点后面的数字完全相同。

3 个答案:

答案 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:#,##.##################}";