问题

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

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

我的问题是,在VB6中有一个函数,它采用本地格式的货币字符串并转换为另一种,或者我只需要解析字符串并替换,或者。 ?

BTW我看过CCur,但不确定这是否能满足我的需求。

解决方案

数据实际上并未存储为字符串"£ 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")

产生第一点二,在控制面板设置为欧洲格式的系统上,它将产生一千二百。

问题可能是您有人坐在计算机上,区域控制面板设置为使用“。”作为小数点分隔符,但它们正在键入“,”,“作为小数点分隔符。

其他提示

您使用的数据库是什么?什么数据类型是存储的数量?

只要您始终从一种格式转换为另一种格式,您就不需要进行任何解析,只需替换“。”用“,”,“或者相反。如果存储在您的字符串中,您可能还需要删除“£”-sign。

处理文化对象等可能是正确的答案,但最简单的方法是从波兰输入中获取输入,并用a替换,然后将其作为类型“money”存储在数据库中;或“十进制”。如果您知道它们(可能是每个用户可配置)总是以波兰语或英语输入数字,那么您可以使用一个函数来运行所有输入数字,以将字符串转换为正确的“十进制”数字。键入的变量。此外,出于显示目的,您可以通过另一个类似的功能运行它,以确保用户始终能够看到他们熟悉的数字格式。这里的关键是一旦你从用户那里得到它就把它切换成十进制,并且在发送给用户之前只在最后一步将它切换回一个字符串。

@KiwiBastard是的,我会这么认为。您是否将金额存储在“(n)varchar”中字段或您使用货币/小数类型字段?如果是后者,则客户会添加货币符号和分隔符,并且不需要替换数据库中的任何内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow