我正在尝试从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”呢?
答案 0 :(得分:2)
我应该使用什么代替“ CDbl”?
以字符串开头时,最佳选择是Double.Parse()
或Double.TryParse()
,具体取决于不良数据的可能性。
但是在这种情况下,这还不够。计算机使用称为IEEE754的东西进行浮点运算。这种对浮点数进行编码的方案被设计为一种以二进制形式表示数字的有效方法,并且进一步直接支持CPU中的算术运算,这意味着它比任何可用的替代方法都快很多(emem关)。几乎每个编程平台都使用它。
缺点是精度有所损失。当视为IEEE754倍增时,173.07-173
产生.69999999
。
您可以通过两种方式解决此问题:
Decimal
type。 Decimal
并不完美,但确实具有更高的精确度(以牺牲一些性能为代价),并且可以为您的样本数据产生准确的结果。 简而言之,请尝试以下代码:
label1.text = (Decimal.Parse(textbox1.text) - Decimal.Parse(textbox2.text)).ToString()