【问题标题】:Local Currency String conversion本地货币字符串转换
【发布时间】:2008-08-21 12:59:45
【问题描述】:

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

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

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

顺便说一句,我看过 CCur,但不确定这是否能达到我想要的效果。

【问题讨论】:

    标签: vb6 localization internationalization


    【解决方案1】:

    数据实际上并没有存储为字符串"£1000.00";它以某种数字格式存储。

    侧边栏: 通常数据库设置为使用 decimal 数据类型(在某些数据库中也称为 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")
    

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

    问题可能在于您有人坐在计算机上,并且区域控制面板设置为使用“.”。作为小数点分隔符,但他们输入的是“,”作为小数点分隔符。

    【讨论】:

      【解决方案2】:

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

      只要你总是从一种格式转换成另一种格式,你就不需要做任何解析,只需替换“.”即可。与“,”或相反。如果“£”符号存储在您的字符串中,您可能还需要删除它。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-18
            • 1970-01-01
            • 1970-01-01
            • 2012-12-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多