Я немного запутался здесь.
Что я должен использовать
Console.WriteLine((val/1085).ToString("N"));
VS
Console.WriteLine(String.Format("{0:N}", (val/1085)));
Также как мне соответствовать InvariantCulture? ЛЮБАЯ ЛУЧШАЯ ПРАКТИКА:)?
Я немного запутался здесь.
Что я должен использовать
Console.WriteLine((val/1085).ToString("N"));
VS
Console.WriteLine(String.Format("{0:N}", (val/1085)));
Также как мне соответствовать InvariantCulture? ЛЮБАЯ ЛУЧШАЯ ПРАКТИКА:)?
На самом деле я предпочитаю третью форму:
Console.WriteLine("{0:N}", val / 1085);
Console.WriteLine
может сделать String.Format
для вас.
Console.WriteLine
не позволяет вам предоставлять культуру. Если это то, что вы хотите, вам все равно придется использовать String.Format
. Как в:
String.Format(CultureInfo.InvariantCulture, "{0:N}", 123456789);
Я не рекомендую использовать это, потому что у международных пользователей будет проблема с этим. Мне 123,456,789.00
выглядит странно.
Для форматирования + культуры я предпочитаю:
.ToString("####0.00",CultureInfo.InvariantCulture)
или
.ToString("N",CultureInfo.InvariantCulture)
В datetime это нормально использовать оба. Я предпочитаю использовать и видеть первое решение (конечно же, с отсутствующими скобками).
String.Format гораздо полезнее, если у вас есть строка с пробелами для каких-то параметров. Тогда это метод убийцы, который действительно поможет вам организовать ваш код.
Используя строковую интерполяцию с методами расширения, я нашел инвариантный и общий способ решить это следующим образом:
public static class Extensions
{
public static string ToStringInvariant<T>(this T obj)
{
return System.FormattableString.Invariant($"{obj}");
}
}
Использование просто, просто используйте .ToStringInvariant()
вместо .ToString()
. Преимущество заключается в том, что он работает для любого типа данных.
Больше информации: Метод FormattableString.Invariant(FormattableString)