Конвертация строки в местной валюте - PullRequest
2 голосов
/ 21 августа 2008

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 21 августа 2008

Данные на самом деле не хранятся в виде строки "£1000.00"; он хранится в каком-то числовом формате.

Боковая панель: Обычно базы данных настроены для хранения денежных сумм с использованием типа данных десятичный (также называемый money в некоторых БД) или как число с плавающей запятой (также называемое double ).

Разница в том, что когда он хранится как десятичное , определенные числа, такие как 0,01, представляются точно, тогда как в double эти числа могут храниться только приблизительно, вызывая ошибки округления.

База данных выглядит как для хранения числа как "£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 голосов
/ 21 августа 2008

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

0 голосов
/ 21 августа 2008

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

0 голосов
/ 21 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...