数据实际上并没有存储为字符串"£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")
产生数字一点二,在控制面板设置为欧洲格式的系统上,它会产生数字一千,二百。
问题可能在于您有人坐在计算机上,并且区域控制面板设置为使用“.”。作为小数点分隔符,但他们输入的是“,”作为小数点分隔符。