如何在double.ToString()中更改小数点的符号?

时间:2010-06-28 19:39:01

标签: c# .net double tostring

我想将小数点更改为C#中的另一个字符。我有一个double变量value

double value;

当我使用命令时:

Console.WriteLine(value.ToString()); // output is 1,25

我知道我可以这样做:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25

但我不太喜欢它,因为它很长,而且我的程序中经常需要它。

是否有一个较短的版本设置“小数点”真的作为点而不是逗号,因为我的文化是常见的?

6 个答案:

答案 0 :(得分:110)

一些捷径是创建一个NumberFormatInfo类,将其NumberDecimalSeparator属性设置为“。”并在需要时将该类用作ToString()方法的参数。

using System.Globalization;

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";

value.ToString(nfi);

答案 1 :(得分:34)

创建扩展方法?

Console.WriteLine(value.ToGBString());

// ...

public static class DoubleExtensions
{
    public static string ToGBString(this double value)
    {
        return value.ToString(CultureInfo.GetCultureInfo("en-GB"));
    }
}

答案 2 :(得分:17)

也许我误解了你的问题的意图,所以如果我错了就纠正我,但你不能在全球范围内应用文化设置一次,然后不用担心自定义每个写声明吗?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

答案 3 :(得分:14)

您可以通过更改用于显示数字的区域性来更改小数点分隔符。但请注意,这将改变有关数字的所有其他内容(例如,分组分隔符,分组大小,小数位数)。从您的问题来看,您似乎默认使用逗号作为小数分隔符的文化。

要更改只是小数点分隔符而不更改区域性,您可以修改当前区域性NumberDecimalSeparatorNumberFormatInfo属性。

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";

这将修改线程的当前文化。现在所有输出都会被更改,这意味着您只需使用value.ToString()输出所需的格式,而无需担心每次输出数字时都要更改文化。

(请注意,neutral文化不能更改其小数分隔符。)

答案 4 :(得分:1)

如果你有一个Asp.Net网络应用程序,你也可以在web.config中设置它,以便在整个网络应用程序中它是相同的

<system.web>
    ...
    <globalization 
        requestEncoding="utf-8" 
        responseEncoding="utf-8" 
        culture="en-GB" 
        uiCulture="en-GB" 
        enableClientBasedCulture="false"/>
    ...
</system.web>

答案 5 :(得分:1)

Convert.ToString(value, CultureInfo.InvariantCulture);