2009-09-17 8 views
2

У нас есть недавно интернационализированное приложение, написанное в классическом ASP. Следующий код реплицирует проблему. Значение этого поля в наборе записей «8.90» и вводится как varchar (255).Classic ASP FormatNumber weirdness

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