2016-12-21 5 views
-1

여기에 쉼표로이 문제가 있으며 소수점과 1000 단위를 구분합니다.문자열을 이중으로 변환하는 문자열에 쉼표 문제가 있습니다. (쉼표 문제)

내 프로그램은 다양한 소스에서 가격을받습니다.

일부 미국 일부 유럽 일부 가격

내가 이러한 인식하려면 코드를 만들 수있는 방법을 찾을 수 없습니다 다시 20000.20

위해 2000.0,20 같은 20000.20

어떤이 2000,0.20처럼 온다 두 가지 형식. 나는 쉼표를 도트로 바꾸기 위해 바꾸려고했지만 숫자에 1000 단위 구분 기호가 있으면 문제가 발생합니다. 어떻게 이러한 종류의 문제없이 문자열을 double로 변환 할 수 있습니까? 내가 성공을 확인하려면 다른 문화를하는 것보다 다른 더 좋은 방법을 알고 아니에요 두 개의 서로 다른 문화

  double.TryParse(price, NumberStyles.Currency, CultureInfo.InvariantCulture, out priceD); 
+0

왜 질문을하면 내게 downvote 줄 것입니다. 나는 계속 가야하고 닥쳐 야한다고 생각한다. –

답변

1

이 내가 여기 그것을 밖으로 시도

double FixUnknownCurrency(string amountText) 
{ 
    amountText = amountText?.Trim()?.Replace(" ", string.Empty); 
    if(string.IsNullOrWhiteSpace(amountText)) 
     return 0d; 

    if(amountText.Length < 3) 
     return double.Parse(amountText); 

    var currencyDecimal = amountText[amountText.Length-3]; 
    if(Char.IsNumber(currencyDecimal)) 
     return double.Parse(amountText); 

    if(currencyDecimal == '.' || currencyDecimal == ',') 
    { 
     amountText = amountText.Replace(",", string.Empty).Replace(".", string.Empty); 
     return double.Parse(amountText)/100d; 
    } 

    return double.Parse(amountText); 
} 

해낸 것입니다. 기차 늦게 달리기 : https://dotnetfiddle.net/HTiL4s

+0

그것은 미국과 유럽에서 작동합니다. 동부 형식을 테스트해야합니다. 다음으로이 게시물을 해결 된 것으로 설정합니다. 고마워. –

0

가있는 경우

나는이 하지만 단지 해달라고 작업을 시도했다.

이런 방법을 작성

public double CurrencyToDouble(string input) 
{ 
    // Will hold the result 
    double result = 0; 

    // Try US culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("en-US"), out result)) { return result; } 

    // Try DE culture 
    if (double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("de-DE"), out result)) { return result; } 

    // Try current system culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.CurrentCulture, out result)) { return result; } 

    // Try invariant culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.InvariantCulture, out result)) { return result; } 

    // Try more common cultures... 

    // Unsuccessful, throw some kind of error 
    throw new FormatException("Could not convert!"); 
} 

입력 :

CurrencyToDouble ("2000,0.20");
CurrencyToDouble ("2000.0,20");

출력 :

20000.2
20000.2

+0

116.9에서 나는 1169를 얻는다. –

+0

코드를 복사하여 붙여 넣기 만하면되는 이유를 알 수있다. 이 경우 귀하의 시스템 문화가 ko-US 이외의 것으로 가정하고 번호가 잘못 포맷됩니다. 먼저 en-US를 시도 할 라인을 추가했습니다. 올바른 문화권을 추가 할 수 있도록 이러한 API의 위치를 ​​알 수 있습니다. – Equalsk