Конвертация строки в местной валюте

Я поддерживаю приложение для клиента, которое используется в двух местах. Один в Англии и один в Польше.

База данных хранится в Англии и использует формат £ 1000,00 для валюты, но информация собирается локально в Польше, где 1000,00 - формат.

Мой вопрос в том, есть ли в VB6 функция, которая принимает строку валюты в локальном формате и конвертирует ее в другой, или мне просто нужно будет проанализировать строку и заменить, или. ?

Кстати, я смотрел на CCur, но не уверен, что это будет делать то, что я хочу.

21.08.2008 12:59:45
4 ОТВЕТА
РЕШЕНИЕ

Данные на самом деле не хранятся в виде строки "£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")

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

Возможно, проблема в том, что кто-то сидит за компьютером с региональной панелью управления, настроенной на использование "." в качестве десятичного разделителя, но они вводят «,» в качестве десятичного разделителя.

8
16.12.2019 07:19:00

Какую базу данных вы используете? И в каком типе данных хранится сумма?

Пока вы всегда конвертируете из одного формата в другой, вам не нужно выполнять какой-либо анализ, просто замените «.» с "," или наоборот. Возможно, вам также понадобится удалить знак «£», если он хранится в вашей строке.

0
21.08.2008 13:13:22

Вероятно, есть правильный ответ, касающийся объектов культуры и тому подобного, но самым простым способом было бы взять входные данные из польского ввода и заменить их символом., А затем сохранить их в своей базе данных как тип «деньги» или «десятичный» ». Если вы знаете, что они (возможно настраиваемые для каждого пользователя) всегда вводят числа на польском или английском языке, у вас может быть функция, через которую вы вводите все входные числа, чтобы преобразовать строку в правильную переменную с типом «десятичная». Кроме того, для целей отображения вы можете запустить его через другую аналогичную функцию, чтобы гарантировать, что пользователь всегда видит формат чисел, который ему удобен. Ключевым моментом здесь является переключение на десятичное число, как только вы получите его от пользователя, и переключите его обратно на строку на последнем шаге, прежде чем отправить его пользователю.

0
21.08.2008 13:24:54

@KiwiBastard да, я бы так подумал. Вы храните свою сумму в поле "(n) varchar" или используете поле типа валюты / десятичного типа? В последнем случае символы валюты и разделители добавляются вашим клиентом, и в базе данных не нужно ничего заменять.

0
21.08.2008 13:30:21