2011-09-08 2 views
1

나는 다음과 같은 코드가 어떤 이유로가지는 Double.toString ("C") 반환 잘못된 통화 기호

 txtCaseworkCost.Text = _CaseworkCost.ToString("C") 

이 텍스트 상자에 출력이 같은

enter image description here

보이는이

달러 기호 대신 이상한 기호가 있습니다. 컴퓨터의 로컬은 미국이므로 $ 기호가 표시되어야합니다.

이 컨트롤은 AutoCAD에서 .Net dll을로드하는 AutoCAD 플러그인에서 사용되고 있습니다. 이상한 부분, 만약 내가 창문 양식 응용 프로그램 에서이 동일한 컨트롤을 사용하여, 그것은 올바른 기호로 잘 작동합니다. 잘못된 기호는 코드가 다른 응용 프로그램에서로드 된 경우에만 나타납니다.

해결 방법이 있습니까? AutoCAD에서 dll을로드하는 방법을 제어 할 수 없어 코드에서 통화 기호를 수정해야합니다. 또한이 오류는 우리가 사용하는보고 도구에도 나타나므로 기호를 수동으로 삽입하는 것 이외의 해결책을 찾고 있습니다.

+1

글꼴을 변경하려고하면 어떻게됩니까? 시스템 제어판에서 현지 통화 기호를 변경하면 어떻게됩니까? 영원한 것은 아니지만 단지 테스트 용으로도 거기에 표시된 기호를 얻을 수 있는지 확인하는 것입니다. –

답변

2

플러그인 시나리오에서는 Thread.CurrentCulture를 제어 할 수 없습니다. 스레드는 AutoCAD에 의해 초기화되고 구성됩니다. AutoCAD는 자체 언어로 기본 언어를 변경했을 수 있습니다. SetThreadLocale() winapi에서.

그래서 달러를 원하면 IFormatProvider 인수를 허용하는 재정의를 사용하고 원하는 Culture.NumberFormatInfo를 전달해야합니다.

+0

'Thread.CurrentThread.CurrentCulture = CultureInfo .CreateSpecificCulture ("ko-US")'그리고이 문제는 문화가 이전에 en-US로보고되었지만 문제를 해결 한 것으로 보입니다. – Kratz

+0

AutoCAD의 나사 구성을 나사 고정합니다. –

3

현재 문화권이 무엇이든 우선해야합니다.

Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US") 
txtCaseworkCost.Text = _CaseworkCost.ToString("C", culture) 
+0

이 문제를 일으키는 AutoCAD 어셈블리가 있으면 흥미로울 것입니다. 나는'string culture = CultureInfo.CurrentCulture.DisplayName; '과 같은 일회성 체크를 던져서 현재 culture가 처음으로 무엇을 반환했는지 확인합니다. –

+0

@George, 이상하게도 문화는 영어 (미국)라고 주장하지만, 어떤 이유로 인해 CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol 속성이'¤'을 반환합니다 – Kratz

1

추가 기능의 현재 문화권을 기호가 좋아 보이기를 원하는대로 설정하십시오.