情景描述如下:
在txtDiscountRate.Text中,它的值为" 0.996010500406591"。
在我的编码中,我做到了这一点:
txtDiscountRate.Text = Math.Round(Val(txtDiscountRate.Text.Trim), 6) 'means considering round till 6th digit
由于十进制后的第6位为0,它给出的值为0.99601。但是我想在十进制值中加上一个条件。
因此,如果小数点后的第6位(0或1或2或3或4)和小数点后的第7位可用,则它将循环到第7位。 否则它会绕到第6位。
我从这个站点得到了一个解决方案(如下面的代码所示)来解决这个问题。我试图实现,但下面的代码抛出一个错误:
CInt(Str(1).Char(5)) is showing error this error -> " 'Char' is not a member of 'String'".
到目前为止,这是我的整个代码:
Dim str() As String = Split(CStr(Dec), ".")
If CInt(Str(1).**Char(5)**) < 5 Then 'It's Char number 5 since it's a zero-based index. So the first number = Index 0.
txtDiscountRate.Text = Math.Round(Val(txtDiscountRate.Text.Trim), 7)
Else
txtDiscountRate.Text = Math.Round(Val(txtDiscountRate.Text.Trim), 6)
End If
需要正确的解决方案。
答案 0 :(得分:0)
我认为以下功能可以帮助您,这是您的解决方案。
Function GetDecimalValue(ByVal value As String) As Decimal
Dim valueFromDot As String = value.Substring(IIf(value.IndexOf(".") < 0, 0, value.IndexOf(".") + 1))
If (valueFromDot.Length > 5) Then
If (CInt(valueFromDot(5).ToString()) < 5 And CInt(valueFromDot(6).ToString()) > 0) Then
GetDecimalValue = Math.Round(CDec(value), 7)
Else
GetDecimalValue = Math.Round(CDec(value), 6)
End If
Else
GetDecimalValue = CDec(value)
End If
End Function