Как преобразовать строку в формат индийских денег?

Я пытаюсь преобразовать строку в формат денег Индии, например, если ввод «1234567», то вывод должен быть «12,34,567».

Я написал следующий код, но он не дает ожидаемого результата.

 CultureInfo hindi = new CultureInfo("hi-IN");
 string text = string.Format(hindi, "{0:c}", fare);
 return text;

может ли кто-нибудь сказать мне, как это сделать?


person Balraj Singh    schedule 19.09.2012    source источник
comment
Я получаю вывод ₹ 12,34,567.00, который кажется правильным; какой тип данных fare ?   -  person Marc Gravell    schedule 19.09.2012
comment
См. stackoverflow.com/questions/10416553/string-format-currency. пример форматирования числа   -  person Paul Zahra    schedule 19.09.2012


Ответы (4)


Если fare является любым из int, long, decimal, float или double, я получаю ожидаемый результат:

₹ 12,34,567.00.

Я подозреваю, что ваш fare на самом деле string; строки не отформатированы string.Format: они уже являются строкой: нет значения для форматирования. Итак: сначала проанализируйте его (используя все, что подходит, возможно, инвариантный десятичный анализ), затем отформатируйте проанализированное значение; Например:

// here we assume that `fare` is actually a `string`
string fare = "1234567";
decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture);
CultureInfo hindi = new CultureInfo("hi-IN");
string text = string.Format(hindi, "{0:c}", parsed);

Редактировать комментарии; чтобы получить только отформатированное значение без символа валюты или десятичной части:

string text = string.Format(hindi, "{0:#,#}", value);
person Marc Gravell    schedule 19.09.2012
comment
На самом деле я ищу вывод в строковом формате, например 12 34 567, а не 12 34 567,00 фунтов стерлингов. приведенное выше решение дает мне последний ответ. - person Balraj Singh; 19.09.2012
comment
@BalrajSingh тогда .... почему вы указали c? Просто: 12,34,567 не является форматом валюты для hi-IN. - person Marc Gravell; 19.09.2012
comment
@BalrajSingh Я добавил пример, чтобы показать способ получения этого вывода. - person Marc Gravell; 19.09.2012

Попробуй это

int myvalue = 123456789;
Console.WriteLine(myvalue.ToString("#,#.##", CultureInfo.CreateSpecificCulture("hi-IN")));//output;- 12,34,56,789
person shiv mysuru    schedule 16.10.2018

String.Format("0:C0") без десятичных знаков.

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

Пример можно найти здесь - посмотрите внизу страницы

РЕДАКТИРОВАТЬ: Вот приведенный выше связанный пост, отформатированный для вашего вопроса:

var cultureInfo = new CultureInfo("hi-IN")
var numberFormatInfo = (NumberFormatInfo)cultureInfo.NumberFormat.Clone();
numberFormatInfo.CurrencySymbol = "";

var price = 1234567;
var formattedPrice = price.ToString("0:C0", numberFormatInfo); // Output: "12,34,567"
person Paul Zahra    schedule 19.09.2012

Если вы хотите отобразить файл в представлении Razor, используйте

@String.Format(new System.Globalization.CultureInfo("hi-IN"), "{0:c}", decimal.Parse("12345678", System.Globalization.CultureInfo.InvariantCulture))

// Output: ₹ 1,23,45,678.00
person Pradip Rupareliya    schedule 18.10.2018