Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top