Visual Basic 如何处理小数点和逗号。

14

我正在尝试将变量保存到文本文件中,但捷克的排版规则让我疯狂。

我调整的程序专为在使用捷克语本地化的计算机上工作而设计,在那里使用小数逗号,但VB使用标准的小数点。

当加载“US”格式的文件时,小数可以被正确加载并显示为捷克小数。在文本框中需要输入捷克小数。我的问题是程序生成捷克小数,并需要“US”小数。

如何强制VB程序将逗号读取为小数符,而不是分隔符,或如何以小数点而不是逗号导出数据?

是的,我可以将123,456加载为a=123b=456,然后将值返回为a+b/1000,但是否有更优雅的解决方案?


在几乎所有你能想到的编程语言中,小数点都是用点来表示的,而不是逗号。如果你的用户期望使用逗号,那么你需要将其转换为显示和输入目的,但是在代码中仍需使用点。 - Spudley
希望你不要尝试使用Input#,它只能读取由Write#编写的数据,而Write#始终使用“通用”格式(在这种情况下,小数点为句号)。 - Bob77
1
Spudley:是的,我知道,但Windows使用三个符号:点、逗号和小数分隔符。其中两个看起来相同。在我的情况下,输出分隔符是从操作系统中使用的逗号,而输入分隔符是编程语言本地的点。 - Crowley
4个回答

13

选择正确的函数。

  • ValStr 总是使用美国设置(点作为小数点)。
  • CDblFormat 将考虑区域设置。

详见手册中有关国际化编程的章节(链接)


7

你的问题可能是使用了Val函数;这个函数并不是国际通用的。帮助文本建议在将字符串转换为数字时使用CDbl


请注意,CDbl() 使用的是系统分隔符(而不是 Excel 实际使用的小数分隔符)。如果您需要获取当前使用的系统分隔符,可以使用 Erik A 提供的方法 - 即使用 Format(0, ".") - Jakub Holan

0

试一下,

Format$(CDbl(Text1.Text), "#,##0.00")


0

感谢您的建议,我不确定是否做错了什么,但我只得到了错误(例如类型不匹配)或“捷克”小数点。

我尝试了使用以下代码的“被打了吗?就更狠地打他!”方法:

Dim PpP As String, SaveFile As Integer

PpP = Form1.TxtA10.Text & " " & Form1.TxtA11.Text
PpP = Replace(PpP, ",", ".")
Print #SaveFile, PpP

编辑:

something 意味着在输出处尝试这些函数,而不是在输入处尝试(例如将 Double 作为 String 参数尝试)。

此代码:

Input #1,TempString
Form1.TxtA10.Text = CDbl(TempString)

同样有效。


首先使用“Dim f As Single:f = CDbl(Form1.TxtA10.Text)”将捷克字符串转换为数字,然后通过“PpP = Str(f)”将数字转换为具有美国格式的字符串。 - MarkJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接