在C#中给double类型添加千位分隔符

3

我想要将一个double格式化为包含千位分隔符和所有尾数的德国数字格式的字符串。但是我无法让它工作(我真的这么愚蠢吗?)。

我想要的是以下内容:

Input: double doubleVal = 123456.789;
Output: 123.456,789

我已经使用了NumberFormats和其他东西,但是我没有得到我想要的。有人可以帮忙吗?


如果您正在构建一些用户将使用的东西,您应该考虑使用默认系统设置来格式化小数。 - Claudiu Constantin
4个回答

15

我认为你应该能够使用以下代码实现:

string text = value.ToString("N");

...如果不是线程当前的区域设置,可以指定德国文化。

示例:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        double d = 123456.789;
        CultureInfo culture = CultureInfo.CreateSpecificCulture("de-DE");

        Console.WriteLine(d.ToString("N3", culture)); // 123.456,789
    }                   
}

请注意,其中的数字3指定了小数点后面的位数。


好的,但是小数点后的位数在变化,我不想四舍五入或截断。 - Kai
2
如果你使用的是“double”,那么无论如何都会进行四舍五入或截断。你的值一开始就不是完全精确的123.456789。如果你想要精确的小数值,应该使用“decimal”。 - Jon Skeet

3
请使用这个:
string s = String.Format("{0:0,0.000}", 123456.789);

需要的不是千位分隔符逗号,而是小数点作为千位分隔符,然后用逗号将整数值与小数位分隔开 - 德国数字格式。 - kaj

2

1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double d = 123456.789;
            CultureInfo ci = new CultureInfo("de-DE");                        
            Console.WriteLine(d.ToString("N",ci));
            Console.ReadLine();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接