我正在为两个位置使用的客户端维护一个应用程序。一个在英格兰,一个在波兰。
数据库存储在英格兰,并使用1000.00英镑的格式作为货币,但信息是在波兰本地收集的,其中1000,00是格式。
我的问题是,在VB6中有一个函数,它采用本地格式的货币字符串并转换为另一种,或者我只需要解析字符串并替换,或者。 ?
BTW我看过CCur,但不确定这是否能满足我的需求。
答案 0 :(得分:8)
数据实际上并不存储为字符串"£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")
产生第一点二,在控制面板设置为欧洲格式的系统上,它将产生一千二百。
问题可能是您有人坐在计算机上,区域控制面板设置为使用“。”作为小数点分隔符,但它们键入“,”作为小数点分隔符。
答案 1 :(得分:0)
您使用的数据库是什么?什么数据类型是存储的数量?
只要您始终从一种格式转换为另一种格式,就不需要进行任何解析,只需替换“。”用“,”或其他方式。如果存储在字符串中,您可能需要删除“£” - 符号。
答案 2 :(得分:0)
可能有一个正确的答案处理文化对象等,但最简单的方法是从抛光输入中获取输入,并用a替换,然后将其存储在数据库中作为“money”类型或“十进制”。如果您知道它们(可能是每个用户可配置)总是以波兰语或英语输入数字,那么您可以使用一个函数来运行所有输入数字,以将字符串转换为正确的“十进制”类型变量。此外,出于显示目的,您可以通过另一个类似的功能运行它,以确保用户始终能够看到他们熟悉的数字格式。这里的关键是一旦你从用户那里得到它就把它切换成十进制,并且在发送给用户之前只在最后一步将它切换回一个字符串。
答案 3 :(得分:0)
@KiwiBastard是的,我会这么认为。您是将数量存储在“(n)varchar”字段中还是使用货币/小数类型字段?如果是后者,则客户会添加货币符号和分隔符,并且不需要替换数据库中的任何内容。