2008-12-11 2 views
10

텍스트와 가격이 포함 된 데이터베이스 (문자열)의 테이블 데이터가 있습니다. 데이터에서 가격을 추출하지만 내 문제는 언젠가는 유동적으로 변환 할 수있는 언젠가는 아닙니다. 언젠가 기간이 문제가 (이 쉼표가 필요합니다)이기 때문이 아니라 항상 작동쉼표 대신 마침표가있는 Float를 변환 하시겠습니까?

Convert.ToSingle(m.Groups[1].Value); 

:

나는 것으로 나타났습니다. 내가 무엇을 할 수 있을지? 나는 "."을 ","로 대체하려하지만 다른 PC에서는 언젠가 그것이 필요한 기간입니다!

답변

21

변환이 PC의 언어를 확인하기 때문에이 문제가 발생합니다.

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat); 

이렇게하면 PC의 언어를 확인하지 않습니다. InvariantCulture에 대한 자세한 내용은 MSDN에서 확인할 수 있습니다. 나는 프로젝트에서 비슷한 것을 가지고 있으며 전환 작업을한다.

+0

17 초에 나를 때리십시오! CultureInfo는 이미 IFormatProvider를 구현하므로 실제로 NumberFormat 속성이 필요하지 않습니다. – leppie

+0

: P 내가 SO에 참여한 이래로 타이핑 횟수를 늘 렸습니다.) –

0

는 다른 사람들이 말했듯이 :

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture); 

또한 데이터베이스에를 쓰는 InvariantCulture를 사용하는 것이 있는지 확인해야합니다. (네이티브 데이터 형식의 열에 데이터를 저장하면 더 좋을 것입니다. 그러나 나는 빗나갑니다 ...)

+0

말한 것을 다시 말하면 더 이상 담당자를 얻을 수 없습니다. – leppie

+0

@leppie, 나는 내가 실제로 어떤 가치를 더했다고 생각한다. 그리고, 어떤 upvotes도 얻지 않을 어떤 rep도 나에게주지 않을 것이다. –

+0

NumberFormat 요구 사항에 대한 설명과 함께 * 값이 * 추가되었음을 동의합니다. – ZombieSheep

2

데이터베이스에 대한 쓰기 권한이 없으면 가장 먼저해야 할 일은 try입니다. 불변의 문화를 사용하도록 자료의 출처를 확신시킨다. Lette으로 당신이 아마 더 나은 것을 그들을 설득 할 수 있다면

float f = float.Parse(fromDb, CultureInfo.InvariantCulture); 
string toOutput = f.ToString(); 

비록, : 다른 측면에서 다음

float f = float.Parse(input); 
string toDb = f.ToString(CultureInfo.InvariantCulture); 

그리고 : 데이터는 사용자가 입력하는 경우 당신이 뭔가를 할 수 있습니다 그들에게 네이티브 데이터 유형을 사용하도록 설득합니다.

위의 조각에서 볼 수 있듯이 나는 또한, float.Parse를 통해 다양한 이유로 변환을 사용하여 recomment,하지만 가장 중요한 사용 할 수있는 TryParse :

float f; 
if (!float.TryParse(input, out f)) 
{ 
    // ERROR 
} 
5

또는 요청 이 특정 숫자 형식을 명시 적으로 지정하십시오.

System.Globalization.NumberFormatInfo nf 
    = new System.Globalization.NumberFormatInfo () 
{ 
    NumberGroupSeparator = "." 
}; 
float f = float.Parse ("5.34534", nf); 
관련 문제