我正在vb.net中创建一个计算器。我有两个问题 1)我这样处理除零。
Private Function calculate(ByVal num1 As Decimal, ByVal num2 As Decimal, ByVal inputOp As String) As Decimal
Dim output As Decimal
firstNum = num1
secondNum = num2
Select Case inputOp
Case "+"
output = num1 + num2
Case "-"
output = num1 - num2
Case "/"
Dim value As Decimal
Try
isFirst()
value = (num1 / num2)
Catch ex As DivideByZeroException
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK)
End Try
output = value
Case "*"
output = num1 * num2
Case "Mod"
output = (num1 Mod num2)
Case "^"
output = CDec(Math.Pow(num1, num2))
End Select
Return output
End Function
并且对数值< = 0如下:
Private Sub btn_log_Click(sender As System.Object, e As System.EventArgs) Handles btn_log.Click
isFirst()
If firstNum <= 0 Then
txtCalc.Text = "Can't calculate the logaritm of a negative number"
Else
txtCalc.Text = Math.Log10(CType(firstNum, Double)).ToString()
isFirstExist = False
End If
End Sub
我的问题是在日志中打印消息和在分案中抛出异常的区别是什么。
对于日志,我也必须有例外。如果有人也可以指出我是如何做到这一点的,因为我不认为对于负对数,DivideByZeroException
有例外。
我的第二个问题是,当我取一个负值的对数时,它会打印出行"Can't calculate the logarithm of a negative number"
,但字体太大。我可以将这行打印的字体变小吗?
答案 0 :(得分:1)
通常,如果正在运行的程序部分无法继续执行有意义或正确的结果,并且您希望强制程序的更高部分处理出错的情况,则应该抛出异常它可以合理地进行。
Math.Log10方法总是返回一个Double,它有点方便&#34;特殊&#34; NaN的返回值,表示不是数字。
http://msdn.microsoft.com/en-us/library/system.math.log10(v=vs.110).aspx
如果他们没有选择返回NaN,那么可行的.NET框架创建者可能会抛出某种异常。然而,这使得使用Log10的开发人员必须在每次调用Log10时检查NaN而不是能够使用try / catch块。
.NET中有几个专门的异常类。如果你希望在传入负数时从代码中抛出异常,那么在这种情况下选择一个好的可能就是ArgumentException。
If firstNum <= 0 Then
Throw New ArgumentException("Can't calculate the logarithm of a negative number")
但是,在这种情况下,您的日志打印错误的解决方案可能更好,因为异常的全部内容是“强迫某些事情处理它”#34;。你的程序没有任何高于按钮点击处理程序的东西,所以抛出一个异常可能会导致它崩溃并出现&#34;未处理的异常&#34;。
关于字体问题,TextFox控件上有一个属性,可让您设置字体外观,大小和样式。在设计器中选择它,然后在属性窗口中挖掘它。如果您只希望您的错误很大而其他结果很小,则可能需要使用某种支持内联样式的富文本框。