Как изменить символ десятичной точки в double.ToString ()? - PullRequest
53 голосов
/ 28 июня 2010

Я хотел бы изменить десятичную точку на другой символ в 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 ]

110 голосов
/ 22 августа 2013

Некоторым способом является создание класса NumberFormatInfo, установите для его свойства NumberDecimalSeparator значение "." и использовать класс в качестве параметра для метода ToString () всякий раз, когда вам это нужно.

using System.Globalization;

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

value.ToString(nfi);
34 голосов
/ 28 июня 2010

Создать метод расширения?

Console.WriteLine(value.ToGBString());

// ...

public static class DoubleExtensions
{
    public static string ToGBString(this double value)
    {
        return value.ToString(CultureInfo.GetCultureInfo("en-GB"));
    }
}
18 голосов
/ 28 июня 2010

Возможно, я неправильно понимаю цель вашего вопроса, так что поправьте меня, если я ошибаюсь, но вы не можете применить глобальные настройки культуры один раз, а затем не беспокоиться о настройке каждого оператора записи?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
14 голосов
/ 29 июня 2010

Вы можете изменить десятичный разделитель, изменив культуру, используемую для отображения числа. Однако помните, что это изменит все остальное в числе (например, разделитель группировки, размеры группировки, количество десятичных разрядов). Из вашего вопроса похоже, что вы по умолчанию используете культуру, которая использует запятую в качестве десятичного разделителя.

Чтобы изменить просто десятичный разделитель без изменения культуры, вы можете изменить свойство NumberDecimalSeparator текущей культуры NumberFormatInfo.

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

Это изменит текущую культуру потока. Все выходные теперь будут изменены, а это означает, что вы можете просто использовать value.ToString() для вывода нужного формата, не беспокоясь об изменении культуры каждый раз, когда вы выводите число.

(Обратите внимание, что для культуры нейтральный нельзя изменить десятичный разделитель.)

1 голос
/ 03 января 2019
Convert.ToString(value, CultureInfo.InvariantCulture);
1 голос
/ 07 июня 2011

Если у вас есть веб-приложение Asp.Net, вы также можете установить его в web.config, чтобы оно было одинаковым во всем веб-приложении

<system.web>
    ...
    <globalization 
        requestEncoding="utf-8" 
        responseEncoding="utf-8" 
        culture="en-GB" 
        uiCulture="en-GB" 
        enableClientBasedCulture="false"/>
    ...
</system.web>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...