Как изменить символ для десятичной точки в 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
но мне это не очень нравится, потому что он очень длинный, и мне это нужно довольно часто в моей программе.
Существует ли более короткая версия для установки "десятичной точки" как точки, а не запятая, как обычно в моей культуре?
Ответы
Ответ 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);