Подтвердить что ты не робот

Как изменить символ для десятичной точки в double.ToString()?

Я хотел бы изменить десятичную точку на другой символ в С#. У меня есть переменная double value

double value;

и когда я использую команду:

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

Я знаю, что могу это сделать:

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

но мне это не очень нравится, потому что он очень длинный, и мне это нужно довольно часто в моей программе.

Существует ли более короткая версия для установки "десятичной точки" как точки, а не запятая, как обычно в моей культуре?

4b9b3361

Ответ 1

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

using System.Globalization;

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

value.ToString(nfi);

Ответ 2

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

Console.WriteLine(value.ToGBString());

// ...

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

Ответ 6

Convert.ToString(value, CultureInfo.InvariantCulture);