2010-06-28 55 views
35

我想将小数点改为C#中的另一个字符。我有一个double可变value如何在double.ToString()中更改小数点的符号?

double value; 

,当我使用命令:

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

我知道我能做到这一点:

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

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

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

回答

77

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

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

value.ToString(nfi); 
+2

我更喜欢这种方法,因为它的语言是独立的! – 2016-07-05 14:04:45

15

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

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

那么,我不需要它在整个程序中我需要它来适应预期小数点的WPF中的PathGeometry的格式。但事实证明,这个解决方案不会伤害其他任何东西。谢谢! – 2010-06-28 19:49:09

+0

@womp更好的答案!这是否也适用于子线程,如果我将它设置到我的主线程?我想将这个设置应用于我的程序集的整个执行时间。 – Bitterblue 2013-03-14 09:54:47

32

创建扩展方法?

Console.WriteLine(value.ToGBString()); 

// ... 

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

也许有人低估了,因为尽管它像魅力一样工作,但它可以通过在全球范围内设置cultureinfo以更漂亮的方式完成。顺便说一句。我不是downvoter。:) – 2015-09-21 07:03:02

+1

@Thomas:事实上,尽管当OP说“我在我的程序中经常需要它”时,我将其解释为“经常但不是每次都是”*。 – LukeH 2015-09-21 09:33:35

14

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

要改变只是小数点分隔符不改变文化,你可以修改当前区域性的NumberFormatInfoNumberDecimalSeparator财产。

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

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

(请注意,neutral文化不能有其小数点改变。)

+5

如果您尝试这样做,则会出现“实例为只读”错误。 – 2015-09-09 08:31:45

+0

@MariusStanescu我认为这只有在他的答案结束时使用adrianbanks提到的一种新的文化时才会发生。 – patrickbadley 2016-02-11 19:28:40

+0

@patrickbadley我刚刚试过这个解决方案,并遇到“只读”错误。在“观察窗口”中添加“Culture.IsNeutralCulture”,表明文化不是中性的。但是,我也注意到它是只读的。 克隆文化似乎是解决这个问题的正确方法。请参阅以下[答案](http://stackoverflow.com/a/3912937/4625305)。 – AXMIM 2016-08-05 14:34:20

1

如果你有一个Asp.Net Web应用程序,还可以将其设置在web.config,使其在整个同整个Web应用程序

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