我正在为在两个位置使用的客户端维护一个应用程序。一间在英国,一间在波兰。

该数据库存储在英格兰,并使用货币格式 £1000.00,但信息是在波兰本地收集的,格式为 1000,00。

我的问题是,在 VB6 中是否有一个函数可以接受本地格式的货币字符串并转换为另一种格式,或者我只需解析该字符串并替换 , or 。?

顺便说一句,我看过 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