VB.net 转换为十进制(放置顺序)

Posted

技术标签:

【中文标题】VB.net 转换为十进制(放置顺序)【英文标题】:VB.net convert , to decimal (order of placement) 【发布时间】:2016-02-25 13:17:26 【问题描述】:

您好,我有一个文本框,如果您使用小数,则可以完美地进行一些数学计算,如果您使用逗号,则不是这样。我探索的第一个选项是只接受蒙面文本框中的数字和小数...但是为什么呢?我们中的一些人从上学开始就学会了使用逗号......所以我的想法是有一个文本框来搜索逗号并将它们转换为用户的小数。

我有以下代码,但例如,如果我输入 2,5,我的转换将变为 25。所以是的,我已将逗号转换为十进制但丢失了它的位置。因此,问题是如何使用正确的小数位正确进行转换?

If TextBox13.Text.Contains(",") Then
TextBox13.Text = Replace(TextBox13.Text, ",", ".")
dim test as double textbox1.text
msgbox(test)
End If

【问题讨论】:

【参考方案1】:

为什么不让逗号成为非法条目。无论如何不要阻止输入字母。

Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    e.Handled = SingleDecimal(sender, e.KeyChar)
End Sub

Public Function SingleDecimal(sender As System.Object, eChar As Char) As Boolean
    Dim chkstr As String = "0123456789."
    If chkstr.IndexOf(eChar) > -1 OrElse eChar = Constants.vbBack Then
        If eChar = "." Then
            If DirectCast(sender, TextBox).Text.IndexOf(eChar) > -1 Then
                Return True
            Else
                Return False
            End If
        End If
        Return False
    Else
        Return True
    End If
End Function

其他解决方案可能是将字符串中的逗号替换为点,然后将其传递回文本框。

If TextBox13.Text.Contains(",") Then
dim tempStr as string = TextBox13.Text
TextBox13.Text = Replace(tempStr, ",", ".")
dim test as double textbox1.text
msgbox(test)
End If

无论如何不应该这样写:

TextBox13.Text = tempStr.Replace(",", ".")

【讨论】:

【参考方案2】:

您是否尝试将字符串转换为十进制或双精度?

Dim 测试为 Decimal = CDec(textbox1.Text) 或者 Dim test as Double= CDbl(textbox1.Text)

【讨论】:

以上是关于VB.net 转换为十进制(放置顺序)的主要内容,如果未能解决你的问题,请参考以下文章

JIT是不是将IL的二进制代码转换为二进制机器码?

怎么把中文字符串转换成十六进制?

从 VB.NET 中的注册表获取实际 REG_DWORD 十进制数的另一种方法?

把十进制整数转换为r(r=2)进制输出(顺序栈实现)

VB.NET 怎么读写二进制文件,类似Open

VB.net 读取 Cobol 文件字段(纯二进制、EBCDIC、打包)