数字格式的 VB6 错误?

VB6 bug with number formatting?

我还没有确认这是一个真正的错误,但在这一点上我开始认为它是。我们仍然支持的旧产品导致了一些数据问题。本产品基于 VB6 构建。问题是区域设置和数字格式。

我可以在这里写出两个简单的示例,可以在您自己的计算机上 运行 验证此问题。您的区域设置也需要针对希腊进行配置。在运行这个之前。

public sub main ()
     dim sTwo as string, sThousand as string

     sTwo = "2.0"
     sThousand = "1,000"

     debug.print "should be 2.0 or 2"
     debug.print sTwo
     ' "2.0"
      debug.print clng(sTwo)
     ' 20
     debug.print cdbl(sTwo)
     ' 20
     debug.print format(sTwo)
     ' 20 

     debug.print "\nshould be 1000.0 or 1000"
     debug.print sThousand
     ' "1000"
     debug.print clng(sThousand)
     ' 1
     debug.print cdbl(sThousand)
     ' 1
     debug.print format(sThousand)
     ' 1
 end sub

我只是在寻找一些验证,以证明这实际上发生在其他用户身上,而不仅仅是在我的机器或使用这台机器的同事身上。但是,如果有人现在知道解决方法,那就太好了。我目前正在尝试查找如何以某种方式强制设置数字格式。

根据 Laneville 的建议

?formatnumber("2.0", 1, vbUseDefault, vbFalse, vbTrue)
20,0
?formatnumber("2.0", 0, vbUseDefault, vbFalse, vbTrue)     
20
?formatnumber("2.0", 0, 0, vbFalse, vbTrue)
20
?formatnumber("2.0", 0, 0, vbFalse, vbfalse)
20

看看FormatNumber函数,你可以指定小数点后的位数(1000.0 vs 1000)以及是否要对数字进行分组(1,000 vs 1000)。

FormatNumber(1000, 0, vbUseDefault, vbFalse, vbFalse)

这个returns1000.

FormatNumber(1000, 0, vbUseDefault, vbFalse, vbTrue)

这个returns1000。

我会使用 VB6 Format$ 函数将数字类型转换为字符串以显示给用户。在内部将数值保存为数字,不要将它们存储为字符串,这是保存数字的错误数据类型。

假设您的数字变量存储了您期望的值,Format$ 应该可以用于格式化显示。据说它是区域设置感知的。您上面的代码未指定格式表达式,请查看可用的内容:

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications

以下是相关摘录:

(.)

小数占位符。在某些语言环境中,逗号用作小数点分隔符。小数点占位符决定了小数点分隔符左右显示的位数。如果格式表达式仅包含此符号左侧的数字符号,则小于 1 的数字以小数点分隔符开头。要显示与小数一起显示的前导零,请使用 0 作为小数分隔符左侧的第一个数字占位符。 T在格式化输出中用作小数占位符的实际字符取决于您的系统识别的数字格式。