현지 통화 문자열 변환


2

두 위치에서 사용되는 클라이언트 용 앱을 유지 관리하고 있습니다. 영국에서 1 명, 폴란드에서 1 명.

데이터베이스는 영국에 저장되며 통화에는 £ 1000.00 형식을 사용하지만 정보는 폴란드에서 로컬로 수집되며 여기서 1000,00은 형식입니다.

내 질문에, VB6에서 로컬 형식으로 통화 문자열을 받아 다른 것으로 변환하는 함수가 있습니까, 아니면 그냥 문자열을 구문 분석하고 바꿔야 할 것입니다. ?

나는 CCur를 보았지만, 내가 원하는 것을 할 수 있을지 확신하지 못했다.

7

데이터는 실제로 문자열 "£1000.00"으로 저장되지 않습니다. 그것은 어떤 숫자 형식으로 저장됩니다.

사이드 바 : 일반적으로 데이터베이스가 진수 데이터 유형을 사용하여 돈 금액을 저장하도록 설정되어 있습니다 (일부 데시벨에 라고도 함), 또는라고도 부동 소수점 수 (같은 더블).

차이는 0.01과 같은 소수 특정 숫자 이중 정확히 반면 표현으로 저장할 때 그 수는 단지 반올림 오류를 일으키는 약 저장 될 수 있다는 것이다.

데이터베이스 뭔가 표시를 포맷하기 때문에"£1000.00"로 수를 저장하는 것으로 보인다. VB6에는 함수가 FormatCurrency이고 1000과 같이 숫자를 취하고 "£1000.00"과 같은 문자열을 반환합니다.

FormatCurrency 함수는 사용할 통화 유형을 지정하는 인수를 사용하지 않습니다.그것은 VB의 다른 모든 로케일 관련 함수와 함께 (Windows 제어판의) 현재 시스템 로케일의 통화를 파악하기 때문입니다. 내 시스템에 있음을 의미

,

Debug.Print FormatCurrency(1000)

$1,000.00를 인쇄 할 것이지만 나는 영국 로케일로 설정 Windows 컴퓨터에 같은 프로그램이, 아마 £1,000.00를 인쇄 할 것이라는 점을 실행하는 경우 이것은 물론 완전히 다른 것입니다.

마찬가지로 코드가 있는데 어딘가에 폴란드에서 사용자의 문자열을 구문 분석하고 번호로 변환하는 부분이 어디인지는 알 수 없습니다. 그리고 그 코드가 Visual Basic에 있다면 다시 제어판에 의존하여 "." 또는 ","는 천 단위 구분 기호이며 ","또는 "." 소수점입니다.

함수 CDbl은 인수를 숫자로 변환합니다. 제어판 유럽 포맷 설정에 따라서 미국

Debug.Print CDbl("1.200")

내 시스템의 예를 들어 시스템에 번호를 하나의 점 두를 생산, 그것은 두 개의 번호를 하나의 천 생산하는 것 백.

지역 제어판이 "."을 (를) 사용하도록 설정된 상태로 컴퓨터에 앉아있는 것이 문제 일 수 있습니다. 소수점 구분 기호로 ","를 소수점 구분 기호로 입력합니다.


0

어떤 데이터베이스를 사용하고 있습니까? 그리고 저장된 데이터의 양은 어떤 데이터 유형입니까?

항상 한 형식에서 다른 형식으로 변환하는 동안 구문 분석을 수행 할 필요없이 "."을 바꿉니다. ","또는 다른 방법으로. 문자열에 "£"기호가 있으면 제거해야 할 수도 있습니다.


0

아마도 culture 객체를 다루는 정답이있을 수 있지만, 가장 쉬운 방법은 입력을 폴란드어로 입력하고,를.로 바꾸고 데이터베이스에 "money"유형으로 저장하는 것입니다 "또는"십진수 ". 사용자 (아마도 사용자 당 구성 가능)가 항상 폴란드어 또는 영어로 숫자를 입력한다는 것을 알고 있다면 문자열을 적절한 "십진"유형 변수로 변환하기 위해 모든 입력 번호를 실행하는 기능을 가질 수 있습니다. 또한 표시 목적으로 다른 유사한 함수를 통해이를 실행할 수 있으므로 사용자가 항상 자신이 편안하게 숫자 형식을 볼 수 있습니다. 여기에서 중요한 것은 사용자가 가져다 자마자 소수 자릿수로 전환하고 마지막 단계에서 문자열로 다시 전환하여 사용자에게 보냅니다.


0

@KiwiBastard 네, 그렇게 생각합니다. 금액을 "(n) varchar"필드에 저장 하시거나 통화/십진 유형 필드를 사용하고 계십니까? 후자의 경우에는 클라이언트에서 통화 기호 및 구분 기호를 추가하므로 데이터베이스의 내용을 바꿀 필요가 없습니다.