2012-07-23 1 views
2

가봉 통화를 사용하여 숫자를 구문 분석하려고합니다.Double.Parse using specific culture

형식에 "."이 사용됩니다. 그룹 분리 및 십진법 없음.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Globalization; 
using System.Threading; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CultureInfo ci = new CultureInfo("fr-FR"); 

      ci.NumberFormat.CurrencyGroupSeparator = "."; 
      ci.NumberFormat.CurrencyDecimalDigits = 0; 
      ci.NumberFormat.CurrencySymbol = "CFA"; 

      Thread.CurrentThread.CurrentCulture = ci; 
      Thread.CurrentThread.CurrentUICulture = ci; 

      double.Parse("300.000", ci).ToString("C"); 
        // gives me a FormatException 
     } 
    } 
} 

거기에 뭔가 내가 놓친 거지 : 여기

은 예입니다?

+3

귀하의 의견은 불완전합니다. 당신이 무엇을 기대하는지 당신이 예상하고있는 것이 명확하지 않습니다. 나는 통화 값에 대해'double' 대신에'decimal'을 사용해야한다고 말할 것입니다 ... –

+0

가봉 사용 형식을 사용하여 구문 분석하려고했습니다. 나는 그것을 파싱 할 수 없지만 항상 double에 대한 예외를 얻는다. – Erick

+0

로버트의 라인을 추가하고 콘솔 어플리케이션에서 구문 분석 할 수있었습니다. 그것은 MVC의 ModelBinder를 사용하여 작동하지 않지만 그것은 시작이라고 생각합니다. – Erick

답변

1

이 내용을 추가하십시오 : ci.NumberFormat.NumberGroupSeparator = ".";

3

귀하의 경우 .NET을 조금 도와야합니다. 단지 Parse을 사용하는 경우 숫자를 얻고 자한다고 가정합니다. 프랑스 문화는 소수 구분 기호로 ,을 사용하며, 이것이 여러분의 코드가 예외를 던지는 이유입니다.

대신,이 시도 :

double.Parse("300.000", NumberStyles.Currency, ci).ToString("C"); 

자, 문자열이 정확하게 당신이 ci 문화에서 지정한 통화 규칙을 존중 통화로 구문 분석 얻을 것이다.

다른 사람들이 말했듯이 통화를 처리 할 때는 실제로 decimal을 사용해야합니다. 더블은 간단히 not precise enough입니다.

+0

+1하지만 OP는 여전히 통화 값에 십진수를 사용해야합니다. –

+0

@MareInfinitus 동의, 그에 따라 내 질문을 편집했습니다. –