2011-05-11 5 views
6

C#에서 문자열을 10 진수로 변환해야하지만이 문자열의 형식이 다릅니다. 예를 들어문자열을 십진수 형식으로 변환하십시오.

:

"50085"

"500,85"

"500.85"

이 소수점에서 500,85에 대한 변환해야합니다. 형식을 사용하여이 변환을 수행하는 단순화 된 형식이 있습니까?

+0

진수 "500,85"의 형식으로 저장하지 않습니다. 십진수 쌍을 묻는거야? –

+2

@myermian : 문화/지역 설정에 따라 다를 수 있습니다. 모두가 같은 방식으로 10 진수 값을 나타냅니다. 이 예에서 '500,85'는 '500.85'와 같을 수 있습니다. –

+0

문자열에'50.865,85 '가있을 수 있습니까? – V4Vendetta

답변

14

동안 decimal.Parse ()가 th 일 때 당신이 찾고있는 전자 방법으로, 당신은 그것에 조금 더 많은 정보를 제공해야 할 것입니다. 자동으로 3 가지 포맷 중 하나를 선택하지는 않으며, IFormatProvider의 형식으로 예상되는 포맷을 알려 주어야합니다. IFormatProvider를 사용해도 "50085"가 제대로 삽입되지 않는다는 것에 유의하십시오.

내가보기에 유일하게 일관된 점은 예제에서 항상 소수점 두 자리를 기대한다는 것입니다. 이런 경우, 당신은 모든 기간과 쉼표를 제거하고 같은 100

어쩌면 무언가에 의해 나눌 수 :

public decimal? CustomParse(string incomingValue) 
{ 
    decimal val; 
    if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val)) 
     return null; 
    return val/100; 
} 
+0

내 문제를 해결하기 위해 어떤 형식도 찾지 못했습니다. 이 구현을 사용하고 소수 자릿수를 추가합니다. 감사합니다. –

6

이것은 당신의 문화의 설정에 따라 작동합니다 :

s = s.Replace(',','.'); 
: 당신의 문화는 기본적으로 소수점으로 , 대신 .을 허용하지 않습니다

string s = "500.85"; 
decimal d = decimal.Parse(s); 

경우, 당신은 아마 필요합니다

그러나 여러 개의 .을 확인해야합니다.이 방법은 입력 된 sanitization 문제와 관련이 있습니다. 입력을 검증하고 위생적으로 처리하여 일련의 규칙을 모두 준수 할 수 있다면 소수로 변환하는 것이 훨씬 쉽습니다.

+0

"50085"를 처리하지 않으므로 입력 sanitization을 언급하는 데 +1이 사용됩니다. 아무런 투표도없이 균형을 이룬다. –

+0

나는'50.865,85'와 같은 입력이있을 수 있다는 것을 두려워한다. – V4Vendetta

+0

@Chris, 50085는 소수점 이후 50085가 될 것이다. 패러디 ... 나는 투표하지 않고 받아 들일 것이다. 이것이 OP 질문에 완전히 대답한다고 생각하지 않습니다. :) – Jaymz

1

가 여러 가지 방법이 있습니다 :

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)

당신이 시도하고 잡을 있는지 확인 ...

13

어떤 문화가 부동 소수점을 표시하기 위해 쉼표를 사용합니다. 당신은 영문 페이지에서 다음 코드를 사용하여이 문제를 테스트 할 수 있습니다

var x = decimal.Parse("500,85"); 
Response.Write(x + (decimal)0.15); 

이 스레드 문화가 부동 소수점으로 쉼표를 사용하는 문화로 설정되어 응답 (501)을 제공합니다.당신과 같이이 강제 할 수 있습니다 :

var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 
3

아래 코드를 사용해보십시오 :

나는 문화가 프랑스어로 가정하고 따라서 소수 구분은 500,85의 값을 제공하고 있기 때문에
string numValue = "500,85"; 
System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR"); 
decimal decValue; 
bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); 
if (decValid) 
{ 
    lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat); 
} 

",". 그런 다음 decimal.TryParse (numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); 은 decValue에서 값을 500.85로 리턴합니다. 마찬가지로 사용자가 영어 (미국) 인 경우 culInfo 생성자를 변경합니다.

1

숫자 그룹화 기호이라는 새로운 기능입니다.

단계 :

  1. 를 열고 국가 및 언어 제어판의 추가 사용자 정의 설정으로 숫자 탭에서
  2. 설정 숫자 그룹화 기호
  3. 설정에
  4. 을 클릭합니다. 변경 쉼표; 로 대체하십시오 (A부터 Z 또는 {/,}까지의 모든 문자). 숫자 그룹화 기호 = e;

예 :

string checkFormate = "123e123"; 
decimal outPut = 0.0M; 
decimal.TryParse(checkFormate, out outPut); 
Ans: outPut=123123; 
관련 문제