VB.Net Convert ToDecimal 不适用于逗号

Posted

技术标签:

【中文标题】VB.Net Convert ToDecimal 不适用于逗号【英文标题】:VB.Net Convert ToDecimal won´t work with comma 【发布时间】:2012-11-29 10:44:15 【问题描述】:

我正在尝试将字符串解析为小数,但我不断收到 formatException

Dim row as GridViewRow
    for each row in grdActieRittenActiefAlt.rows
        Dim rbl as RadioButtonList = row.FindControl("tblAddAct")
        'toevoegen = true
        if rbl.SelectedItem.Value = true then
            Dim opgaveIdent as Integer = Convert.ToInt32(grdActieRittenActiefAlt.DataKeys(row.RowIndex).Value.ToString())

            Dim curOldTarief as Decimal = Convert.ToDecimal(lblCuratiefTarief.Text)
            Dim curOldKorting as Decimal = Convert.ToDecimal(lblCuratiefKorting.Text)

            Dim curTariefString as String = row.Cells(4).Text
            Dim curKortingString as String = row.Cells(6).Text

            Dim curTarief as Decimal = Convert.ToDecimal(curTariefString)
            Dim curKorting as Decimal = Convert.ToDecimal(curKortingString)

            lblCuratiefTarief.Text = (curOldTarief + curTarief).ToString()
            lblCuratiefKorting.Text = (curOldKorting + curKorting).ToString()


        end if
    next row

输入是 431,25。 到目前为止,我已经尝试了以下方法:

使用 .Replace(",",".") 将逗号更改为冒号 => 无效 使用强制 CultureInfo => 无效 直接使用 row.Cells(4).Text => 没用 使用子字符串查询仅获取整数 (431) => 有效但没有解决方案

还有其他人有什么建议吗?

【问题讨论】:

程序运行的文化是什么?你试过Decimal.Parse吗? 我无法使用替换重现您的结果 - Convert.ToDecimal("431,25".Replace(',', '.')) 导致 431.25。将 Decimal.Parse 与文化 fr-FR 一起使用也可以按预期工作。 Decimal.Pase 给出了相同的结果。文化是 nl-NL。 检查您的输入字符串。确保它周围没有奇怪的字符。如果您是从 Excel/html 导入(在这里猜测,基于row.Cells(4).Text),您可能会得到额外的字符。 我找到了解决方案,但不是最好的解决方案。数据来自数据网格。通过将网格中的边界字段更改为带有标签的模板字段并使用该标签来转换它的小数点即可。我不知道为什么,但它解决了问题...... 【参考方案1】:

在进行更多测试和尝试后,我找到了解决问题的方法/解决方案。

row.Cells(4).Text 是一个绑定域。我已将其更改为带有标签的 TemplateField。 通过制作一个局部变量(标签)并使用它来转换它的小数。我不知道为什么,但对我来说这是一个解决方案。

【讨论】:

【参考方案2】:

你试过FormatNumber函数吗?

FormatNumber(number, 2)

2 是小数位数。

【讨论】:

以上是关于VB.Net Convert ToDecimal 不适用于逗号的主要内容,如果未能解决你的问题,请参考以下文章

Convert.ToDecimal 引发的意外异常

Decimal.Parse() 与 Convert.ToDecimal() [重复]

为啥 Convert.ToDecimal(3.1922) 显示为 31922?

Convert.ToDecimal 为简单字符串引发异常

使用 Convert.ToDecimal() 会导致 C# 中的值四舍五入。如何克服这个问题?

decimal.TryParse和Convert.ToDecimal+try{} catch{}的性能比较