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

vcudknz3  于 2023-02-06  发布在  .NET
关注(0)|答案(7)|浏览(200)

我想在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

但我不太喜欢它,因为它太长了,而且我的程序经常需要它。
有没有一个更短的版本,设置“小数点”真的作为点,而不是逗号,因为是在我的文化是常见的?

xqkwcwgp

xqkwcwgp1#

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

using System.Globalization;

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

value.ToString(nfi);
92dk7w1h

92dk7w1h2#

是否创建扩展方法?

Console.WriteLine(value.ToGBString());

// ...

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

ih99xse13#

也许我误解了您问题的意图,如果我说错了请纠正我,但是您不能一次性全局应用区域性设置,然后就不用担心自定义每个write语句吗?

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

nc1teljy4#

您可以通过更改用于显示数字的区域性来更改小数点分隔符。但请注意,这将更改有关数字的所有其他内容(例如,分组分隔符、分组大小、小数位数)。从您的问题来看,您默认使用的区域性使用逗号作为小数点分隔符。
若要仅更改***小数分隔符而不更改区域性,可以修改当前区域性的NumberFormatInfoNumberDecimalSeparator属性。

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

这将修改线程的当前区域性。所有输出现在都将被更改,这意味着您可以只使用value.ToString()来输出您想要的格式,而不必担心每次输出数字时都要更改区域性。
(Note neutral区域性不能更改其小数分隔符。)

snvhrwxg

snvhrwxg5#

Convert.ToString(value, CultureInfo.InvariantCulture);
v2g6jxz6

v2g6jxz66#

如果您有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>
des4xlb0

des4xlb07#

一个更简单但不那么优雅的解决方案:

string str = number.toString("0.00000").Replace(",",".");

很短并且有效,但您必须在“Replace”函数的第一个参数中指定当前分隔符。这不是一个好主意,运行这个解决方案的软件,可以运行在不同的语言系统,是不是那么灵活。

相关问题