2009-09-17 6 views
2

우리는 고전적인 ASP로 작성된 최근 국제화 된 응용 프로그램이 있습니다. 다음 코드는 문제를 복제합니다. 레코드 집합의 해당 필드 값은 "8.90"이며 varchar (255)로 입력됩니다.클래식 ASP 형식 번호 이상

session.LCID = 2057 
nNumber = recMessages.fields(lCounter) 
Response.Write nNumber '' # prints 8.90 
Response.Write FormatNumber(8.90) '' # prints 8.90 
Response.Write FormatNumber(nNumber) '' # prints 8.90 

session.LCID = 1034 
nNumber = recMessages.fields(lCounter) 
Response.Write nNumber '' # prints 8.90 
Response.Write FormatNumber(8.90) '' # prints 8,90 
Response.Write FormatNumber(nNumber) '' # prints 890,00! 

여기에 무슨 일이 일어나고 있습니까? 왜 특정 지역에 1000을 곱하면 될까요?

+1

스페인어의 소수점은 무엇입니까? –

답변

4

당신이 제공 한 것에서 그것은 마치 것처럼 보입니다. 8.90에서는 천 단위 구분 기호로 취급됩니다. LCID 1034 스페인어입니까?

확실하지 않지만 그 로캘의 숫자 서식을 확인하면 마침표를 구분 기호로 사용합니다.

건배

+0

그래, 그게 다야. 문자열을 숫자로 변환하는 함수 (비 로케일 방식)에서 FormatNumber를 래핑하여 고정시킨 다음 FormatNumber를 호출합니다. – Simon

0

다른 로캘에서는 다른 문자가 소수 및 천 단위 구분 기호로 사용됩니다. 점 (.)은 2057 로켈의 소수 구분 기호이지만 1034 로켈에서는 천 단위 구분 기호로 사용됩니다.

문제를 해결하려면 필드 값의 점 문자를 로케일 별 소수점 구분 기호로 바꾸십시오. 잘 모르겠지만, 이런 식으로 뭔가 작업을해야합니다 :

session.LCID = 1034 
strDecSep = Mid(CStr(CDbl(3/2)), 2, 1) 
nNumber = recMessages.fields(lCounter) 
nNumber = Replace(nNumber, ".", strDecSep) 
0

그것은 그 숫자는 그 나라의 통화 형식으로 포맷하는 1000에 의해 곱 것이 아니다. 예를 들어 미국의 경우 1234.56은 1,234.56 달러로, 스페인에서는 같은 숫자가 1.234,56으로 표시됩니다.