Vb.net 将两个值相加时将整数值转换为十进制值

Vb.net 将两个值相加时将整数值转换为十进制值,vb.net,Vb.net,我正在开发一个vb.net应用程序 我的代码如下: txtTotalPrevious.Text = Val(txtTotalPrevious.Text) + Val(txtoldtotal.text) 我的价值观是: txtTotalPrevious.Text=187.0000 txtoldtotal=3 我得到了结果 result =190 但我的预期结果是: result=190.0000 我的逻辑中有什么问题?如果希望输出的字符串与您想要的一样,您可以使用String.Format

我正在开发一个vb.net应用程序

我的代码如下:

txtTotalPrevious.Text = Val(txtTotalPrevious.Text) + Val(txtoldtotal.text)
我的价值观是:

txtTotalPrevious.Text=187.0000
txtoldtotal=3
我得到了结果

result =190
但我的预期结果是:

result=190.0000

我的逻辑中有什么问题?

如果希望输出的字符串与您想要的一样,您可以使用
String.Format

Dim str1 As String = "187.0000"
Dim str2 As String = "3"
Dim resultString As String = String.Format("{0:0.0000}", Val(str1) + Val(str2))
' And the result will be 190.0000
如果你想要双重结果:

Dim resultDouble as Double= Val(str1) + Val(str2)
' And the result will be Double 190
编辑


基于ValCubas的评论,你应该考虑一些注解:

避免使用Val方法

函数在读取字符串的第一个字符处停止读取该字符串 无法识别为数字的一部分。符号和字符 通常被认为是数值的一部分,如美元符号和 逗号、不可识别。但是,该函数可以识别基数 前缀&O(表示八进制)和&H(表示十六进制)。空白、制表符和 换行符从参数中删除。
下面的电话 返回值1615198。
Val(“东北第198街1615号”)

Val函数仅将句点(.)识别为有效的小数 分离器。当使用不同的十进制分隔符时,如 国际应用程序,使用CDbl或CInt来转换 字符串到一个数字。转换数字的字符串表示形式的步骤 在特定区域性中,使用数字类型的 Parse(String,IFormatProvider)方法。例如,使用Double.Parse 将字符串转换为双精度字符串时

作为VB.Net程序员,使用&代替+进行字符串连接

使用运算符时,可能无法确定 将发生加法还是字符串串联。使用& 用于串联的运算符,以消除歧义并提供 自我记录代码


首先,不要使用Val;它是一个旧函数(旧VB6,在.NET之前),以不太可靠而闻名。其次,您必须理解数字(187)与其字符串表示(187.0000或187等)之间的区别。您可以通过各种方式将数字转换为字符串。例如,givenNumberVariable.ToString(format),其中format是指示数字应如何显示的模式(例如,十进制分隔符后的零)。相关的MSDN文章(或您自己做一些测试)应该足以知道如何获得您想要的内容。打开
选项Strict
,您将看到
txtTotalPrevious.Text=187.0000
是无效的分配。请阅读我上面的评论。不建议依赖Val。还有许多更可靠的替代方案(Convert.To、Parse、TryParse等)。你甚至可以使用比Val更可靠的VB6函数(在VB.NET中被接受)。@varocabas谢谢你的评论,你完全正确:)我只关注String.Format,不想更改代码的其他部分,但是为什么你要在代码中包含Val?您可以只关注数字到字符串的转换。例如:Dim resultString As String=String.Format(“{0:0.0000}”,numberOne&numberTwo)(假设numberOne和numberTwo是OP应该从字符串转换的数字)。但是为什么要添加一个你知道不正确的代码呢?!此外,如果你知道某件事(即使没有被直接询问),你也应该对它发表评论。无论如何,请不要写得太对,因为这会让未来的读者(和OP)感到困惑。顺便说一句,你最好使用&来连接字符串,而不是+来确保在任何情况下都不会有任何问题。确定。虽然这不是为了我,而是为了未来的读者和作品。