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

Mar*_*cka 53 .net c# double tostring

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

double value;
Run Code Online (Sandbox Code Playgroud)

当我使用命令时:

Console.WriteLine(value.ToString()); // output is 1,25
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25
Run Code Online (Sandbox Code Playgroud)

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

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

小智 117

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

using System.Globalization;

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

value.ToString(nfi);
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这种方法,因为它的语言独立! (3认同)

Luk*_*keH 35

创建扩展方法?

Console.WriteLine(value.ToGBString());

// ...

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

  • @Thomas:的确,虽然当OP说"我在我的程序中经常需要它"时,*我将其解释为类似*"经常但不是每次都"*. (2认同)

wom*_*omp 18

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

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Run Code Online (Sandbox Code Playgroud)


adr*_*nks 14

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

更改小数点分隔符而不更改区域性,可以修改NumberDecimalSeparator当前区域性的属性NumberFormatInfo.

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
Run Code Online (Sandbox Code Playgroud)

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

(请注意,中性文化不能更改其小数分隔符.)

  • 如果您尝试这样做,则会出现"Instance is read-only"错误. (7认同)
  • @patrickbadley我刚试过这个解决方案并遇到了"只读"错误.在"观察窗口"中添加"Culture.IsNeutralCulture"清晰表明文化不是中立的.但是,我也注意到它是readonly.克隆文化似乎是解决这个问题的正确方法.请参阅以下[answer](http://stackoverflow.com/a/3912937/4625305). (2认同)

tor*_*ree 7

Convert.ToString(value, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)