本地货币字符串转换
我正在为在两个位置使用的客户端维护一个应用程序。一支在英格兰,一支在波兰。
该数据库存储在英格兰,货币格式为1000.00,但是该信息是在波兰本地收集的,格式为1000,00。
我的问题是,在VB6中是否有一个函数可以采用本地格式的货币字符串并将其转换为另一种,或者我只需要解析该字符串并替换或者即可。 ?
顺便说一句,我看过CCur,但不确定是否能满足我的要求。
解决方案
回答
我们正在使用什么数据库?以及存储的数据类型是什么?
只要我们始终从一种格式转换为另一种格式,就无需进行任何分析,只需替换""即可。与","或者其他方式。如果字符串中存储了""符号,则可能也需要删除该符号。
回答
解决文化对象等问题可能是正确的答案,但是最简单的方法是从波兰语输入中获取输入,并用。替换,然后将其以" money"或者" decimal"类型存储在数据库中"。如果我们知道他们(可能是每个用户可配置的)总是以波兰语或者英语输入数字,则可以使用一个函数来运行所有输入数字,以将字符串转换为适当的"十进制"类型变量。同样,出于显示目的,我们可以通过另一个类似的功能来运行它,以确保用户始终看到自己喜欢的数字格式。这里的关键是,一旦我们从用户那里获取到它,就将其切换为十进制,并且仅在最后一步将其切换回字符串,然后再将其发送给用户。
回答
@KiwiBastard是的,我会这样认为。我们是将金额存储在"(n)varchar"字段中,还是在使用货币/小数类型字段?如果是后者,则客户端将添加货币符号和分隔符,并且无需替换数据库中的任何内容。
回答
数据实际上没有存储为字符串" 1000.00"。它以某种数字格式存储。
Sidebar: Usually databases are set up to store money amounts using either the decimal data type (also called money in some DBs), or as a floating point number (also called double). The difference is that when it's stored as decimal certain numbers like 0.01 are represented exactly whereas in double those numbers can only be stored approximately, causing rounding errors.
数据库似乎将数字存储为" 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")
在将"控制面板"设置为欧洲格式的系统上生成第二个数字,则将生成第一,第二和第二个数字。
问题可能出在我们有人坐在计算机上,而该计算机的区域控制面板设置为使用""。作为小数点分隔符,但是他们输入","作为小数点分隔符。