Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vb.net中设置文本框值的格式,而不使用2位小数的变量?_Vb.net - Fatal编程技术网

如何在vb.net中设置文本框值的格式,而不使用2位小数的变量?

如何在vb.net中设置文本框值的格式,而不使用2位小数的变量?,vb.net,Vb.net,我试图在末尾获取2个十进制数字 我在互联网上看到了很多例子,但它们都可能是从变量中格式化的,而不是直接从文本框中格式化的 还有一件事我很困惑。 这可以正常工作: Dim d1 As Double txtGAmt.Text = 1500 d1 = txtGAmt.Text txtGAmt.Text = Format(d1, "0.00") 此处txtGAmt.Text将1500.00 为什么下面的代码不能按需要工作? txtGAmt.Text = 1500 txtGAmt.Text = Form

我试图在末尾获取2个十进制数字
我在互联网上看到了很多例子,但它们都可能是从变量中格式化的,而不是直接从文本框中格式化的
还有一件事我很困惑。
这可以正常工作:

Dim d1 As Double
txtGAmt.Text = 1500
d1 = txtGAmt.Text
txtGAmt.Text = Format(d1, "0.00")
此处txtGAmt.Text1500.00

为什么下面的代码不能按需要工作?

txtGAmt.Text = 1500
txtGAmt.Text = Format(txtGAmt.Text, "0.00")
这给了我
txtGAmt.Text=0.00

以下是我尝试过的事情,
txtGAmt.Text=格式(“{0:n2}”,txtGAmt.Text)

这给了我txtGAmt.Text=1500(无变化)

还尝试了
formatcurrency

它工作得很好,但我不希望货币符号和逗号出现在数字之间


现在,我的实际问题是每次在每个文本框中添加两个小数点时是否必须声明变量?

函数格式适用于数值而不是字符串。尝试使用Val函数或CDec将文本转换为数值

txtGAmt.Text = 1500
txtGAmt.Text = Format(Val(txtGAmt.Text), "0.00")
发布此答案并检查@David Wilson的回复后,我意识到如果文本框的内容是超出范围的数值,而您选择使用CDec而不是Val,则可能会导致异常。因此,下面是另一个解决方案:

txtGAmt.Text = 1500
Dim number As Decimal
If Decimal.TryParse(txtGAmt.Text, number) Then
    txtGAmt.Text = Format(number, "0.00")
Else
    'You can put your own logic here
    txtGAmt.Text = 0
End If

如果你想格式化一个数字,那么你需要一个数字。
文本框
文本
是一个
字符串
,因此尝试将其格式化为数字是没有意义的。您需要先将
字符串
转换为数字,然后根据需要格式化该数字。这就是为什么你看到的所有例子都是这样的:因为你就是这么做的。另外,不要在VB.NET中使用
格式。对号码本身调用
ToString
,例如
myTextBox.Text=myNumber.ToString(“n2”)
。如果您想要货币,那么可以使用“c”作为格式说明符。等等,正如@jmcilhinney所说,您需要将文本转换为数字。在第二个示例中,您可以使用这一行来代替
TextBox1.Text=Format(Double.Parse(TextBox1.Text),“0.00”)
还要确保为所有项目启用了Strict选项。请看一下此链接,稍作解释-提供的原始解决方案不会在非数字数据上引发异常。它只会产生意想不到的结果。
Val
函数将始终返回数值结果。如果输入不是数字,它只返回0.0。例如,如果输入是“123Hello”,那么
Val
将返回123.0。第二个解决方案会留下一些需要改进的地方,因为您要对输入进行两次解析。
TryParse
方法验证并解析输入,因此您已经在
number
中得到了结果,那么在这之后使用
Val
解析相同的输入以再次获得相同的输出又有什么意义呢?我在匆忙中犯了一个错误,我忘记将txtGAmt更改为numberth,这更像是一个错误。仍然值得注意的是,您所拥有的代码不会使用
选项严格编译,而这应该始终是严格的。另外,
Format
是一个VB6延迟,您应该在VB.NET中调用
ToString