2009-11-01 5 views
2

지역 설정에 따라 두배의 정밀도가 다른 것으로 나타났습니다. 예를 들어복식에 항상 a가 포함되도록하는 방법. 캐릭터?

:

3,47 또는 3.45

어떻게 이중 항상 . 정밀 문자를 포함해야 적용 할 수 있습니다?

일단이 double을 포함하는 클래스를 XML로 직렬화하면 문제는 표준 결과를 기대하는 다른 시스템으로 전달됩니다.

답장을 읽고 나면 (문자열을 대체하여) 속성을 문자열로 변경하여 문자열 값 (이중이 아닌)으로 직렬화 할 것을 권장합니까?

+1

마지막으로 추가 주석에 : 문자열에 대체 기호를 사용하지 마십시오 (천 단위 구분 기호는 무엇입니까? 아니면 부동 소수점 숫자는 문법 - 쉼표로 끝나는가?) 나중에 chaing에서이 작업을 수행하는 것이 더 어려워 질 것입니다. 그냥 문자열로 변환하는 순간에'InvariantCulture'를 사용하거나, 전혀 응용하지 않는'Application.CurrentCulture'를 설정하면됩니다. – Abel

답변

15

당신은 고정 문화권을 사용하여 문자열로 배를 넣어해야합니다.

double d = 3.47; 
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture)); 
2

이중 자체에는 "." 또는 ","는 표현의 인쇄 만 수행합니다. 사용자 정의 형식 here을 읽을 수 있습니다.

[OP에 따라 업데이트]
디자인이 어떤 모양인지 정확히 모르겠지만 DTO에 문자열 속성을 만들어 두 번 형식화 된 문자열을 출력하고 double 속성을 직렬화 가능으로 표시하십시오.

7

InvariantCulture으로 서식을 지정해야합니다.

"." 및 ","서식 지정 문자 are interpreted according to the culture settings. 기본적으로 :

// use this statement to force the default: 
Application.CurrentCulture = CultureInfo.InvariantCulture; 
string s = myNumber.ToString(); 

// for one number you have to remember to use: 
string s = myNumber.ToString(CultureInfo.InvariantCulture); 

참고 : 현재 applicaton에서 모든 숫자에 대해이 작업을 수행해야하는 경우

+0

+1. 예를 들어, XML을 생성하는 코드는 InvariantCulture에서 실행되어야합니다. – RichardOD

0

, 당신은 응용 프로그램 전체 (새 스레드가이 설정을 상속을)를 설정하려면 다음을 사용할 수 있습니다 ASP.NET 또는 WinForms 여부에 관계없이 응용 프로그램은 실행중인 시스템의 culture 설정을 사용합니다 (ASP.NET에서는 에서 문화권을 전역으로 설정할 수 있음).