首页 文章

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

提问于
浏览
1

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

    第一个问题,您需要在格式化之前解析字符串 . 可能会失去一些精确度 . 然后你需要决定你需要的最大精度 . 然后你可以做这样的事情:

    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 时可能会失去精度 . 你可以像这样做一些真正的cludgy:

    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,将其转换回正确格式化的字符串然后再将小数部分重新打开(如果有的话)

  • 2

    这样的事情?

    string s1 = format.ToString("#,##0.00");
    
  • 0

    格式是这样的:

    string format = "{0:#,##.##################}";
    

相关问题