Преобразование местной валюты


2

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

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

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

BTW Я посмотрел на CCur, но не уверен, что это сделает то, что я хочу.

7

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

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

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


0

Что вы используете? И какой тип данных является суммой, хранящейся в?

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


0

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


0

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