Как правильно отформатировать текст на основе валюты - PullRequest
1 голос
/ 29 июня 2010

В моем приложении выполняется расчет, который отображает текст в GUI. Приложение умножает заданную пользователем сумму на определенное число (скажем, 0,85), чтобы создать общее количество (Пользователь набирает 2, приложение обрабатывает 2 х 0,85).

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

Пока я пробовал

.ToString("N2");

Это только что привело к добавлению двух дополнительных нулей к концу рисунка.

Проблема может быть замечена здесь:

Error!

Как видите, правильное значение - 0,68 (или 0,68 фунтов стерлингов), а мой текст показывает 68,00 фунтов стерлингов. Извлечение «N2» из ToString действительно помогает, но я все еще остаюсь с £ 68.

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

Спасибо!

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

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Попробуйте это:

string.Format("{0:C}", money_value);

Это также будет работать:

.ToString("C");

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

Если вы хотите сделать все возможное, вы можете сделать это:

string.Format(ui_culture, “{0:C}”, money_value);

, где ui_culture - культура, связанная с валютой.

Отредактировано, чтобы добавить:

Хорошая особенность этого форматирования в том, что он управляет всеми пунктуациями.

Я не уверен, что символы валютывсегда ведущий персонаж.Если это так, вы можете удалить его:

string.Format(ui_culture, “{0:C}”, money_value).substring(1);
1 голос
/ 29 июня 2010

На первый взгляд кажется, что вы умножили свое значение (0,68) на 100, чтобы получить 68,00, что было бы правильно.Тем не менее, ваше количество равно 80, что должно дать вам значение 54.40.

Если вы умножаете на 2, то вы должны получить 1.70.

0 голосов
/ 29 июня 2010

Вам потребуется использовать перегрузку ToString, которая принимает параметр IFormatProvider:

double value = 80;
string ukCurrency = value.ToString("N2", CultureInfo.CreateSpecificCulture("en-GB"));

На самом деле я не уверен, будет ли это включать символ валюты (непроверенный пример).Я надеюсь, что использование строки формата "N2" лишит символ валюты ... но это не так.Может быть достаточно просто пропустить первый символ строки:

ukCurrency = ukCurrency.Substring(1);
...