Знак доллара не отображается правильно с десятичной.ToString (& ldquo; C & rdquo ;, CultureInfo.InvariantCulture); [Дубликат]

Если вы используете VS 2013 Update 5, вы должны вручную установить обновление 2.8.7 для NuGet Packet Manager.

Отчет об ошибке более подробная информация.

22
задан Ian Boyd 24 February 2010 в 21:35
поделиться

6 ответов

Да.

Например: InvariantCulture использует международный символ для валюты: «¤» по отношению к знаку доллара: «$» при форматировании валюты.

По большей части, однако, они очень похожи.

Редактирование: список различий между en-US и Invariant:

                          en-US                        Invariant
=====================     ==================           ==================
Number                    123456.78                    +123456.78
Currency Symbol           $                            ¤
Currency                  $123456.78                   ¤123456.78
Short Date                1/11/2012                    01/11/2012
Time                      10:36:52 PM                  22:36:52
Metric                    No                           Yes
Long Date                 Wednesday, January 11, 2012  Wednesday, 11 January, 2012
Year Month                January, 2012                2012 January
29
ответ дан Ian Boyd 18 August 2018 в 03:26
поделиться
  • 1
    Процитировать MSDN: «Свойство InvariantCulture не представляет ни нейтральную, ни конкретную культуру. Он представляет собой третий тип культуры, нечувствительный к культуре. Это связано с английским языком, но не с какой-либо страной или регионом. ... Таким образом, имеет смысл вести себя по большей части как английский (хотя для странного формата даты в США мне хотелось бы увидеть что-то здравомыслящий), но валюта была бы просто бессмыслицей :) – Joey 24 February 2010 в 21:41
  • 2
    И логический формат даты: yyyy-MM-dd. – Dan Byström 24 February 2010 в 21:41
  • 3
    Убирайся. Поэтому попытка разобрать денежную строку с InvariantCulture будет работать в мире. – Ian Boyd 24 February 2010 в 22:09
  • 4
    @IanBoyd, это хорошо на самом деле. Поэтому никто не по ошибке попытается проанализировать локальную денежную строку, используя InvariantCulture. То, что действительно делает InvariantCulture бесполезным, неудобно M/d/yyyy вместо нормального yyyy-MM-dd. – Sasha 28 August 2017 в 10:35

Короткий ответ «да». InvariantCulture - это то, что он говорит, а не конкретная культура. Это английский, но не определенный регион

, вы можете прочитать об этом здесь: MSDN

1
ответ дан Jeremy B. 18 August 2018 в 03:26
поделиться

Очень важно учитывать намерение данных. Если вы выполняете сериализацию, обязательно используйте InvariantCulture.

Смотрите: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

Из документации microsoft:

Данные динамической культуры

За исключением инвариантной культуры данные культуры являются динамическими. Это справедливо даже для предопределенных культур. ...

Внимание

При сохранении данных ваше приложение должно использовать культуру инвариантов, использовать двоичный формат или использовать определенный культурно-независимый формат. Данные, сохраненные в соответствии с текущими значениями, связанными с определенной культурой, отличными от инвариантной культуры, могут стать нечитаемыми или могут измениться по смыслу, если эта культура изменится.

Я недавно столкнулся с этим, когда пользователь установил свои настройки для региона и языка на английский (США), но выбрал свой личный формат даты для dd-MMM-yy. Он получил проект от клиента с датой в стандартном формате по-американски «4/29/2010 1:45:30 PM» и кодом:

customValue = DateTime.Parse ( custom_alue.ToString (), CultureInfo.CreateSpecificCulture («en-US»));

выбрасывает исключение, поскольку его локальные предпочтения переопределяют типичный формат в США.

1
ответ дан Kim 18 August 2018 в 03:26
поделиться

Хорошо, если вы посмотрите на то, что может произвести ваш фрагмент кода:

CultureInfo c1 = CultureInfo.InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");

Console.WriteLine( c1.DateTimeFormat.ShortDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.ShortDatePattern.ToString());

Console.WriteLine( c1.DateTimeFormat.LongDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.LongDatePattern.ToString());

Console.WriteLine( c1.NumberFormat.CurrencyDecimalDigits.ToString());
Console.WriteLine( c2.NumberFormat.CurrencyDecimalDigits.ToString());

Console.WriteLine( c1.TextInfo.IsRightToLeft.ToString());
Console.WriteLine( c2.TextInfo.IsRightToLeft.ToString());

Вы увидите некоторые отличия:

MM/dd/yyyy
M/d/yyyy
dddd, dd MMMM yyyy
dddd, MMMM dd, yyyy
2
2
False
False

И подумайте, когда США теряют основу и решают начать использовать даты европейского стиля или двигаться к метрической системе (метрическая система - инструмент дьявола! Моя машина получает сорок стержней в hogshead, и так мне нравится!), InvariantCulture может просто прохладно и плавно оставаться таким, каким оно есть. Таким образом, все те даты, которые вы спрятали в базе данных в текстовой форме с использованием InvariantCulture, будут продолжать работать ...

3
ответ дан Michael Burr 18 August 2018 в 03:26
поделиться

Я знаю, что у них разные CultureName и LCID (см. этот список ).

Кроме того, символы валюты различны - ¤ для InvariantCulture и $ for en-US.

Из InvariantCulture :

It is used in almost any method in the Globalization namespace that requires a culture.

Предполагая, что в большинстве случаев они взаимозаменяемы , Однако имена имеют намерение штата, поэтому вы должны думать об этом при использовании CultureInfo.

0
ответ дан Oded 18 August 2018 в 03:26
поделиться

Есть некоторые фактические различия (проверьте оба значения в окне Watch), но наиболее важным отличием является намерение . InvariantCulture показывает вашу цель анализировать некоторые данные в независимой культуре, если это связано с английским языком, в то время как en-US заявляет о вашем фактическом намерении анализировать данные в специфической для США форме.

4
ответ дан Vinko Vrsalovic 18 August 2018 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: