【问题标题】:dividing 2 doubles results always in 1 vb除以 2 双打结果总是 1 vb
【发布时间】:2015-12-13 22:27:25
【问题描述】:

txtfield1 和 txtMCLCCurrToEUR 都是双精度数

(原来字符串转成double,都是小数点后5位的forex值)

Dim f1 As Double
txtField2.Text = (Double.TryParse(txtMCLCurrToEUR.Text, f1) / Double.TryParse(txtField1.Text, f1)).ToString("N5")

不管它们的值如何,我总是在 txtField2.text 中以 1 结束

我似乎忽略了一些重要的东西,但对于我的一生——我看不出它会是什么......

任何帮助将不胜感激!

【问题讨论】:

  • 老兄,你有没有考虑添加另一个变量:Dim f1, f2 as Double???
  • Option Strict On 放在代码文件的顶部。您正在尝试除以字符串。

标签: vb.net double type-conversion tryparse


【解决方案1】:

Double.TryParse() 将返回 Boolean 值(true/false),true 表示成功,false 表示从字符串转换为双精度失败。因此,如果您对布尔值应用除法,它将为您提供10 的结果。

你可以通过启用Option Strict On来运行你的程序来实现这一点

考虑一个例子:

 Dim a = True
 Dim b = True
 Dim c = CDbl(a) / CDbl(b) ' will gives you output as 1 

在哪里

 Dim a = True
 Dim b = False
 Dim c = CDbl(a) / CDbl(b) ' will gives you output as -1.#INF

您可以在不使用任何第三个变量的情况下执行此操作,如下所示。

txtField2.Text = (Val(txtMCLCurrToEUR.Text) / Val(txtField1.Text)).ToString("N5")

Val() 将返回0,以防它无法转换输入字符串/null

【讨论】:

  • 非常好!你们是最伟大的!感谢大家提供优雅的解决方案!
【解决方案2】:

您不应该对两个转换都使用 f1,第二个会覆盖第一个,结果总是一个。 Tryparse 没有返回值,只有一个 flac vor 是否成功。

Dim f1 As Double
 Double.TryParse(txtMCLCurrToEUR.Text, f1)
Dim f2 As Double
 Double.TryParse(txtField1.Text, f2)
txtField2.Text =  (f1/f2 ).ToString("N5")

【讨论】:

  • 我不知道是谁标记了你,也不知道为什么。但很好的答案:你是完全正确的。
  • 我在我的答案的第一个版本中犯了一个错误,downvote 对意识到这一点很有用^^
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多