代码之家  ›  专栏  ›  技术社区  ›  JamesSugrue

本地货币字符串转换

  •  2
  • JamesSugrue  · 技术社区  · 16 年前

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

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

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

    顺便说一句,我看过CCUR,但不确定它是否能满足我的需要。

    4 回复  |  直到 10 年前
        1
  •  8
  •   sven    16 年前

    数据实际上不是作为字符串存储的 "£1000.00" ;它以某种数字格式存储。

    侧栏: 通常,数据库设置为使用 十进制的 数据类型(也称为 在某些数据库中),或作为浮点数(也称为 双重的 )

    区别在于当它被存储为 十进制的 某些数字如0.01精确表示,而在 双重的 这些数字只能大致存储,导致舍入错误。

    数据库 出现 将数字存储为 “1000” 因为有些东西正在格式化它以便显示。在vb6中,有一个函数 FormatCurrency 它需要1000这样的数字,并返回一个字符串 “1000” .

    你会注意到 格式货币 函数不接受指定要使用的货币类型的参数。这是因为它与VB中所有其他特定于区域设置的函数一起,从系统的当前区域设置(从Windows控制面板)计算出货币。

    这意味着在我的系统中,

    Debug.Print FormatCurrency(1000)

    将打印 $1,000.00 ,但如果我在设置为英国区域设置的Windows计算机上运行相同的程序,它可能会打印 £1,000.00 当然,这是完全不同的。

    类似地,在波兰的某个地方,你也有一些代码,我不知道在哪里,它似乎负责解析用户的字符串并将其转换为数字。如果这段代码是VisualBasic代码,那么它又依赖于控制面板来决定“.”还是“,”是千位分隔符,而“,”还是“.”是小数点。

    函数 CDbl 将其参数转换为数字。例如,在美国我的系统上

    Debug.Print CDbl("1.200")

    在控制面板设置为欧洲格式的系统上,生成数字1点2,它将生成数字1千2百。

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

        2
  •  0
  •   Espo    16 年前

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

    只要您总是从一种格式转换为另一种格式,就不需要进行任何解析,只需将“.”替换为“,”或以其他方式替换即可。如果“”-符号存储在字符串中,则可能还需要删除它。

        3
  •  0
  •   Kibbee    16 年前

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

        4
  •  0
  •   Espo    16 年前

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