Как преобразовать строку в деньги


83

У меня есть строка вроде 000000000100 , которую я хотел бы преобразовать в 1,00 и наоборот.

Ведущий ноль будет удален, две последние цифры будут десятичными.

Приведу еще пример:

000000001000 <=> 10.00
000000001005 <=> 10.05
000000331150 <=> 3311.50

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

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));

1
PadLeft(12,'0')
— Наоборот,

Ответы:


76

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

string.Format("{0:#.00}", Convert.ToDecimal(myMoneyString) / 100);

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


3
и вы получаете символ валюты бесплатно :) проще в использовании0:#.00
— V4Vendetta

@ThePower Спасибо, но буква C будет конвертирована в валюту, что вернет знак доллара.
— Элвин

7
Вы никогда не должны использовать floatили doubleпредставлять валюту.
— Джон Грант

2
Почему бы не использовать double или float? См. Здесь: stackoverflow.com/questions/3730019/…
— Дов Миллер,

3
Разве вам не следует использовать «F2» вместо «# .00»?
— Пол Грок,

58

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

EX:

decimal decimalMoneyValue = 1921.39m;
string formattedMoneyValue = String.Format("{0:C}", decimalMoneyValue);

рабочий пример: https://dotnetfiddle.net/soxxuW


43
decimal value = 0.00M;
value = Convert.ToDecimal(12345.12345);
Console.WriteLine(value.ToString("C"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C1"));
//OutPut : $12345.1
Console.WriteLine(value.ToString("C2"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C3"));
//OutPut : $12345.123
Console.WriteLine(value.ToString("C4"));
//OutPut : $12345.1234
Console.WriteLine(value.ToString("C5"));
//OutPut : $12345.12345
Console.WriteLine(value.ToString("C6"));
//OutPut : $12345.123450

Вывод в консоль:


Этот будет должным образом учитывать различия в культуре. Культурные различия могут изменить не только символ, но и разделители цифр (и теоретически положение символа валюты). msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
— Robear


12

Если у вас есть строка в двойном / десятичном формате, чтобы привести ее в правильное форматирование для использования в конкретной локали

double amount = 1234.95;

amount.ToString("C") // whatever the executing computer thinks is the right fomat

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie"))    //  €1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es"))    //  1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB"))    //  £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  $1,234.95

GetCultureInfoпохоже, не существует в UWP.
— visc 04

4
    string s ="000000000100";
    decimal iv = 0;
    decimal.TryParse(s, out iv);
    Console.WriteLine((iv / 100).ToString("0.00"));

Вы никогда не должны использовать floatили doubleпредставлять валюту.
— Джон Грант


3
//Extra currency symbol and currency formatting: "€3,311.50":
String result = (Decimal.Parse("000000331150") / 100).ToString("C");

//No currency symbol and no currency formatting: "3311.50"
String result = (Decimal.Parse("000000331150") / 100).ToString("f2");


1

Сначала выполните синтаксический анализ вашей строки до десятичной дроби.


0

Попробуйте что-то вроде этого:

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);

0
var tests = new[] {"000000001000", "000000001005", "000000331150"};
foreach (var test in tests)
{
    Console.WriteLine("{0} <=> {1:f2}", test, Convert.ToDecimal(test) / 100);
}

Поскольку вы не запрашивали символ валюты, я использовал «f2» вместо «C».


0

пытаться

amtf =  amtf.Insert(amtf.Length - 2, ".");

при этом не удаляются ведущие нули. Если вы идете по пути простых манипуляций со строками, вам нужно будет добавить .Trim ("0" .ToCharArray ()) в конец вашего кода
— Энтони Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.