Классический ASP FormatNumber странность - PullRequest
2 голосов
/ 17 сентября 2009

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

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?

Ответы [ 3 ]

4 голосов
/ 17 сентября 2009

Из того, что вы предоставили, все выглядит так, как будто. в 8,90 рассматривается как разделитель тысяч. Является ли LCID 1034 испанским?

Я не уверен, но я думаю, что если вы проверите форматирование числа для этой локали, в качестве разделителя будет использоваться точка.

Приветствия

0 голосов
/ 18 октября 2010

Дело не в том, что оно умножается на 1000. Число форматируется в формате валюты этой страны. Например, в США 1234,56 будет отформатировано как 1 234,56 долл. США, в Испании такое же число будет равно 1,234,56

.
0 голосов
/ 17 сентября 2009

В разных локалях разные символы используются в качестве десятичного разделителя и разделителя тысяч. Хотя точка (.) - это десятичный разделитель в локали 2057, он, скорее всего, используется как разделитель тысяч в локали 1034.

Чтобы обойти эту проблему, вы можете попробовать заменить символ точки в значении поля на десятичный разделитель, соответствующий локали. Я не уверен, но что-то вроде этого должно работать:

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