문자열을 돈으로 포맷하는 방법


82

내가 좋아하는 캐릭터가 000000000100나는 1.00와 그 반대로 변환하고 싶습니다.

선행 0은 제거되고 마지막 두 자리는 10 진수입니다.

더 많은 예를 들어 보겠습니다.

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

문자열을 10 진수로 변환 한 다음 100으로 나누고 통화 형식 문자열을 적용합니다.

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

요청에 따라 통화 기호를 제거하고 대신 십진수로 변환하도록 편집되었습니다.


3
그리고 당신은 무료로 통화 기호를 얻을 수 있습니다 :) 사용하기 더 간단합니다0:#.00
V4Vendetta

@ThePower 감사합니다.하지만 'C'는 통화로 변환되어 $ 기호를 반환합니다.
Alvin

7
통화를 사용 float하거나 double표현 해서는 안됩니다 .
존 그랜트

2
double 또는 float를 사용하지 않는 이유는 무엇입니까? 여기를 참조하십시오 : stackoverflow.com/questions/3730019/...
도브 밀러

3
"# .00"대신 "F2"를 사용해야하지 않습니까?
Paul Groke


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

22

효과가있다!

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

산출

Order Total: $1,921.39

2
달러 기호를 제거해야하는 경우 어떻게합니까?
Paris Qian Sen

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

GetCultureInfoUWP에 존재하지 않는 것 같습니다.
visc

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

2

당신은 또한 할 수 있습니다 :

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

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

통화 기호를 묻지 않았으므로 "C"대신 "f2"를 사용했습니다.


0

시험

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

선행 0을 제거하지 않습니다. 간단한 문자열 조작 경로를 따라가는 경우 코드 끝에 .Trim ( "0".ToCharArray ())를 추가해야합니다
Antony Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.