Валюта формата C# не работает должным образом
Привет,
Я пишу код ниже в приложении Consol:
Приставка.WriteLine ("{0:C}, 10.5);
Приставка.ReadKey();
Печать: 10,50 ?
Я ожидал:10,50 TL
Зачем показывать "? " вместо "TL"
Спасибо...
Что я уже пробовал:
Я использовал информацию о культуре, но проблема не решена
Garth J Lancaster
вы не показываете нам пару вещей, которые были бы хороши - например, " как "вы используете "культуру", какова текущая культура на вашей машине или что такое "TL". Вы, например, используете что-то вроде этого ниже :-
Приставка.WriteLine(значение.ToString("C", CultureInfo.CreateSpecificCulture ("xx-yy")));
установить 'Культура', где 'ХХ-ый является необходимой культуры ?, например, 'Ан-ГБ', 'ан-Нас'
[правка 1: является ли ваша культура "тр-тр" для турецкого языка ? - значит, " TL "- это "турецкая лира"??] [/edit 1]
[edit 2 : что-то подсказывает мне, что вам, возможно, придется установить " TL " в качестве символа валюты по умолчанию - см. Эту ссылку http://stackoverflow.com/questions/951689/how-to-set-currencysymbol-on-readonly-cultureinfo-numberformat особенно сообщение от Джона Скита
а это значит, что вам нужно :-
ВАР оригинал = свойство CultureInfo.GetCultureInfo("тр-тр");
var mutableNfi = (NumberFormatInfo)original. NumberFormat.Клон();
mutableNfi.CurrencySymbol = "ТЛ";
двойная цена = конвертация.Метод todouble(retailerProduct.Цена);
класс StringBuilder.Append(цена.ToString("C", mutableNfi));
(Ссылка : http://stackoverflow.com/questions/16710418/get-latest-turkish-currency-symbol ) [/edit 2]
[edit 3: по-видимому,"? " печатается потому, что какой бы символ ни был для "турецкой лиры", он недоступен в используемом вами шрифте, то есть, если вы пишете на консоль, это, скорее всего, будет "консоль Люсинды" или что-то в этом роде [/edit 3]
xkadir
Спасибо за ответ, Гарт Джей Ланкастер
Моя культура (тр-тр) турецкая
Два примера, которые я сделал, для информации о культуре, но не для отображения "TL":
Пример 1:
двойная цена=10.50;
Приставка.WriteLine (цена.ToString("C", CultureInfo.CreateSpecificCulture ("tr-TR")));
Приставка.ReadKey();
Выход: 10,50 ?
Пример 2:
двойная цена=10.50;
Приставка.WriteLine ("Urünün Fiyatı: {0}", Цена.ToString("c", new CultureInfo ("tr-TR")));
Приставка.ReadKey();
Выход: 10,50 ?
---------------------------------------------
Проблема решается так же, как пример, который вы привели из Jon Skeet;display "TL"
ВАР оригинал = свойство CultureInfo.GetCultureInfo("тр-тр");
var mutableNfi = (NumberFormatInfo)original. NumberFormat.Клон();
mutableNfi.CurrencySymbol = "ТЛ";
двойная цена = 10.50;
Приставка.WriteLine (цена.ToString("C", mutableNfi));
Выход : 10,50 TL
Но мое желание не таково.
Я учитель, и мне нужно показать это самым простым способом.Например,
Приставка.WriteLine ("{0:C}, 10.50);
Приставка.ReadKey();
Выход: 10,50 ?
Я хочу :10,50 TL
Но я не могу показать свое желание на своем компьютере(Win10, VS2015 Enterprise)
Garth J Lancaster
"самый простой способ" - но соответствует ли это коммерческой реальности ? если бы у вас были ученики, которые собирались сделать карьеру ,какой смысл было бы учить их?
вы могли бы :-
1) Найдите шрифт, который имеет руну/глиф/символ для 'TL' , и используйте его в своей консольной программе-коммерческая реальность ? хорошо, если вы только когда-либо выводите данные на консоль, это тоже не так "просто"
2) Используйте предложение Питера - которое не обрабатывает", "против".
3) Напишите свой собственный класс-просто для того, чтобы обрабатывать турецкую валюту на консоли - действительно, я слышу "Не изобретайте заново колесо" в затылке
возможно, "самый простой способ" - написать оболочку или фасад вокруг кода Джона Скита
ВАР оригинал = свойство CultureInfo.GetCultureInfo("тр-тр");
var mutableNfi = (NumberFormatInfo)original. NumberFormat.Клон();
mutableNfi.CurrencySymbol = "ТЛ";
двойная цена = 10.50;
Приставка.WriteLine (цена.ToString("C", mutableNfi));
назовите это OutputCurrencyAsTurkishForConsole или что - то в этом роде и представьте это своим студентам-осознайте тот факт, что, учитывая, что вы используете "консольный" вывод и не можете/не хотите менять шрифт и/или не можете найти шрифт с нужным символом в любом случае, это представляет собой лучший компромисс в "простой" и "коммерческой реальности".
(или в качестве альтернативы коду Джона Скита напишите для этого оболочку/фасад
Приставка.WriteLine (цена.ToString("C", CultureInfo.CreateSpecificCulture ("tr-TR")));
это удаляет символ"? "и добавляет "TL".)
Я все еще слышу, как ты говоришь "нет, просто" на заднем плане ? - Извините, учитывая требования (вы хотите вывести правильно отформатированное число в турецком формате/локали на консоль) и ограничения используемой вами системы, оболочка/фасад вокруг любого фрагмента кода является "самым простым" вариантом, представляющим коммерческую реальность
xkadir
Спасибо за ваши содержательные ответы,Гарт Джей Ланкастер
Мои ученики еще не достигли такого уровня.Они находятся на начальном уровне.Они научатся, когда придет время.
Как вы сказали, это, кажется, решает мою проблему с поиском подходящего шрифта, который является руной/глифом/символом для 'TL'
Peter Leow
Чтобы избежать всех хлопот, почему бы просто не
строка currencySymbol = " TL";
Приставка.WriteLine ("{0:N2} {1}", 10.5, currencySymbol);
Garth J Lancaster
ну, я вижу одну проблему с вашим подходом - обычно, да, держите его простым - но как вы собираетесь справиться с тем фактом, что турецкие числа используют", "вместо". "- и любые "проблемы с группировкой цифр" (если они есть) - так что, если вам нужно справиться с этими двумя проблемами, почему бы не использовать класс, созданный для форматирования валюты - просто потому, что я сказал это, и Джон Скит сказал это, не делает это единственным решением, но когда вам нужно начать возиться с " n " случаями в качестве обходных путей, ну, я бы сказал, что это не так. скорее просто разберитесь с одним вопросом
xkadir
Спасибо за ответ, Питер Леоу
Проблема решается так же, как и приведенный вами пример. Но мое желание не таково.
Я учитель, и мне нужно показать это самым простым способом.Например,
Приставка.WriteLine ("{0:C}, 10.50);
Приставка.ReadKey();
Выход: 10,50 ?
Я хочу :10,50 TL
Но я не могу показать свое желание на своем компьютере(Win10, VS2015 Enterprise)