减去两个文本框的值时出现“ CDbl”功能问题

时间:2019-01-30 14:23:05

标签: vb.net

我正在尝试从Visual Studio 2012中的两个文本框中减去该值。

示例输入和结果:

textbox1 -  textbox2   = label1 
  25.9   -    25.4     =  0.50   (it's ok) 
 173.07  -   173       =  0.06   (should be 0.07) 
 144.98  -   142.12    =  2.85   (should be 2.86) 

我的代码(我分别尝试了所有三行):

label1.text = (Convert.ToDouble(textbox1.text) - Convert.ToDouble(textbox2.text)).ToString

label1.text = (CDbl(textbox1.text) - CDbl(textbox2.text)).ToString

label1.text = (Val(textbox1.text) - Val(textbox2.text)).ToString 

此错误(可能不是错误)有时发生,而不是每次都发生。 我在这里想念什么?而我应该用什么代替“ CDbl”呢?

1 个答案:

答案 0 :(得分:2)

  

我应该使用什么代替“ CDbl”?

以字符串开头时,最佳选择是Double.Parse()Double.TryParse(),具体取决于不良数据的可能性。

但是在这种情况下,这还不够。计算机使用称为IEEE754的东西进行浮点运算。这种对浮点数进行编码的方案被设计为一种以二进制形式表示数字的有效方法,并且进一步直接支持CPU中的算术运算,这意味着它比任何可用的替代方法都快很多(emem关)。几乎每个编程平台都使用它。

缺点是精度有所损失。当视为IEEE754倍增时,173.07-173产生.69999999

您可以通过两种方式解决此问题:

  1. 舍入结果。使用除法时这不是一个选择,但只需加减,您就可以跟踪有效数字并四舍五入以获得准确的结果。不过,这很痛苦。
  2. 使用the Decimal typeDecimal并不完美,但确实具有更高的精确度(以牺牲一些性能为代价),并且可以为您的样本数据产生准确的结果。

简而言之,请尝试以下代码:

label1.text = (Decimal.Parse(textbox1.text) - Decimal.Parse(textbox2.text)).ToString()