Як відформатувати рядок у гроші


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
В іншому випадку помножте на 100 і використовуйте PadLeft(12,'0')рядок
V4Vendetta

Відповіді:


76

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

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

Відредаговано, щоб видалити символ валюти за запитом і замість цього перетворити в десятковий.


3
і ви отримаєте символ валюти безкоштовно :) простіший у використанні0:#.00
V4Vendetta

@ThePower Дякую, але 'C' перетворить у валюту, що поверне знак $.
Елвін,

7
Ви ніколи не повинні використовувати floatабо doubleпредставляти валюту.
Джон Грант,

2
Чому б не використовувати подвійний або плаваючий? Дивіться тут: stackoverflow.com/questions/3730019/…
Дов Міллер

3
Чи не слід використовувати "F2" замість "# .00"?
Пол Гроук,

58

вам потрібно буде перетворити його в десяткову, а потім відформатувати у форматі грошей.

ЕКС:

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

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

Ви ніколи не повинні використовувати floatабо doubleпредставляти валюту.
Джон Грант,

4

Спробуйте просто так

 var amtf = $"{Convert.ToDecimal(amt):#0.00}";

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");



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.