문제

이것은 나를 미치게합니다. ASP.NET 2.0 WebForm 페이지에 다음 문자열이 있습니다.

string s = "0.009";

충분히 간단합니다. 이제 내 문화가 스페인어라면 "es -es" - 문자열을 두 배로 변환하려고합니다. 다음을 수행합니다.

double d = Double.Parse(s, new CultureInfo("es-ES"));

내가 기대하는 것은 0,009입니다. 대신, 나는 9를 얻는다. .net은 그것이 천개의 분리기라고 생각한다는 것을 이해한다. EN-US의 쉼표라고 생각하지만, 구문 분석 방법에 전달하는 문화 정보를 가져 와서 올바른 형식을 적용해서는 안된다. 변환?

만약 내가한다면

double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));

형식은 이제 0,009입니다. 아무도?

도움이 되었습니까?

해결책

그것 ~이다 당신이 준 문화를 취하고 올바른 형식을 적용합니다. 당신은 "0.009"문자열을 제공하고 그것이 스페인이라고 말했습니다 ... 그러면 당신은 그것을 스페인으로 제대로 해석했다고 불평합니다! 문자열이 스페인어라는 것을 알지 못한다는 것을 말하지 마십시오.

구문 분석 방법을 전달해야합니다.이 경우에는 문자열의 문화가 구문 분석되어야하며,이 경우 en

다른 팁

Jess의 글쓰기가 저에게 효과가 있습니다. "불변 문화"를 얻는 방법을 시험해 볼 필요가있는 사람은 누구나 보입니다.

double d = Double.Parse(myString, CultureInfo.InvariantCulture);

(첫 번째 stackoverflow 게시물, 그래서 예, 오히려 한계;)

당신은 그것을 거꾸로 가지고 있습니다.

당신이 말할 때 double d = Double.Parse(s, new CultureInfo("es-ES"));, 당신은 끈이 ES-ES 문화에 기록되어 있다고 가정 할 때 .NET에게 문자열을 두 배로 구문 분석하도록 요청합니다.

스페인 문화에서 "." 수천 개의 분리기이므로 "0.009"는 9입니다.

결국 Tostring ()을 사용하여 변환하면 스페인 문화를 사용하여 0.009를 문자열로 변환합니다. 행동이 정확합니다.

내 생각에 불변 문화와 함께 Double.parse를 사용하고 스페인 문화와 함께 Tostring을 사용하고 싶으므로 0.009는 0,009가됩니다.

ES-ES Culture 0.009에서는 실제로 "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""부분이 ""라고 해석하고 있다고 생각합니다. 소수점 분리기가 아니므로 문자열 "0.009"를 요청하면 구문 분석 ES-ES 문화를 사용하면 실제로 Deouble 9.0을 가져와야합니다. "0,009"를 구문 분석하라고 요청하면 0.009의 두 배를 받아야합니다.

마찬가지로, 당신이 그것을 요구한다면 체재 Double 0.009는 ES-ES에서 "0,009"문자열을 가져와야합니다.

당신은 구문 분석과 서식을 착각하고 있습니다. 기반 문화에서 형성된 문자열을 가져 와서 A, 기반 문화를 사용하여 구문 분석하기 때문에 처음으로 .009 대신 9를 얻습니다. 당신은 그것이 만들어진 문화를 사용하여 그것을 구문 분석 한 다음, 당신이 디스플레이에 원하는 문화를 사용하여 포맷해야합니다.

double d = Double.Parse("0,009",
    NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
    CultureInfo.CreateSpecificCulture("es-ES"));

ES-ES Culture "에서"소수점 Seporator (Not ")입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top