我正在为在两个位置使用的客户端维护一个应用程序。一个在英国,一个在波兰。
该数据库存储在英格兰并使用 1000.00 英镑的格式作为货币,但信息是在波兰本地收集的,格式为 1000,00。
我的问题是,在 VB6 中是否有一个函数可以将本地格式的货币字符串转换为另一种格式,或者我只需要解析字符串并替换 , 或 . ?
顺便说一句,我看过 CCur,但不确定这是否会达到我想要的效果。
我正在为在两个位置使用的客户端维护一个应用程序。一个在英国,一个在波兰。
该数据库存储在英格兰并使用 1000.00 英镑的格式作为货币,但信息是在波兰本地收集的,格式为 1000,00。
我的问题是,在 VB6 中是否有一个函数可以将本地格式的货币字符串转换为另一种格式,或者我只需要解析字符串并替换 , 或 . ?
顺便说一句,我看过 CCur,但不确定这是否会达到我想要的效果。
数据实际上并未存储为字符串"£1000.00"
;它以某种数字格式存储。
边栏:通常数据库设置为使用十进制数据类型(在某些数据库中也称为货币)或浮点数(也称为双精度)来存储金额。
不同之处在于,当它以十进制存储时,某些数字(如 0.01)被精确表示,而在double中,这些数字只能近似存储,导致舍入错误。
数据库似乎正在存储该数字,"£1000.00"
因为某些东西正在对其进行格式化以供显示。在 VB6 中,有一个函数FormatCurrency
可以接受一个像 1000 这样的数字并返回一个像"£1000.00"
.
您会注意到该FormatCurrency
函数不接受指定要使用的货币类型的参数。这是因为它与 VB 中的所有其他特定于区域设置的函数一起,从系统的当前区域设置(从 Windows 控制面板)中计算出货币。
这意味着在我的系统上,
Debug.Print FormatCurrency(1000)
将 print $1,000.00
,但如果我在设置为英国语言环境的 Windows 计算机上运行相同的程序,它可能会 print £1,000.00
,这当然是完全不同的东西。
同样,您在某个地方有一些代码,我不知道在波兰的哪个地方,它似乎负责解析用户的字符串并将其转换为数字。如果该代码在 Visual Basic 中,同样,它依靠控制面板来决定是否使用“.”。或“,”是千位分隔符,无论是“,”还是“。” 是小数点。
该函数CDbl
将其参数转换为数字。例如,在我在美国的系统上
Debug.Print CDbl("1.200")
产生数字一点二,在控制面板设置为欧洲格式的系统上,它会产生数字一千,两百。
问题可能在于您有人坐在计算机上,并且区域控制面板设置为使用“。” 作为小数点分隔符,但他们输入“,”作为小数点分隔符。
你用的是什么数据库?存储的数量是什么数据类型?
只要您总是从一种格式转换为另一种格式,就不需要进行任何解析,只需替换“.”即可。与“,”或相反。如果“£”符号存储在您的字符串中,您可能还需要删除它。
处理文化对象等可能有一个正确的答案,但最简单的方法是从波兰语输入中获取输入,并将 , 替换为 .,然后将其作为“金钱”或“十进制”类型存储在您的数据库中”。如果您知道他们(可能每个用户可配置)总是以波兰语或英语输入数字,您可以使用一个函数来运行所有输入数字,以将字符串转换为正确的“十进制”类型变量。此外,出于显示目的,您可以通过另一个类似的函数运行它,以确保用户始终看到他们熟悉的数字格式。这里的关键是从用户那里得到它后立即将其切换为小数,并且仅在最后一步将其切换回字符串,然后再将其发送给用户。
@KiwiBastard 是的,我会这么认为。您是将金额存储在“(n)varchar”字段中还是使用货币/十进制类型字段?如果是后者,货币符号和分隔符由您的客户添加,无需替换数据库中的任何内容。