繁体   English   中英

解析小数时出现FormatException

[英]FormatException when parsing decimals

我正在编写用于计费的代码。 这是我的代码的一小部分:

private void NightsLabel_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true;
    }
    if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
    {
        e.Handled = true;
    }

}

private void TotalButton_Click(object sender, EventArgs e)
{
    RoomChargeLabel.Text = (Convert.ToInt64(NightRateLabel.Text) + Convert.ToInt64(NightsLabel.Text)).ToString();
}

当我点击 Total Button Click void 时,我很挣扎。 每当我输入包含小数的数字时,都会出现错误:

System.FormatException:“输入字符串的格式不正确”。

每当我改用整数时,它都可以正常工作,但我需要弄清楚为什么我不能做小数。

请帮忙: :)

您正在使用Convert.ToInt64(NightRateLabel.Text) ,您应该使用Convert.ToDouble(NightRateLabel.Text)

或者你可以做一个双变换检查

using System;

public class Program
{
    public static void Main()
    {
        var doubleVal = "123123";
        object fomattedValue = null;
        try {
            fomattedValue = Convert.ToInt64(doubleVal);
        } catch {
            fomattedValue = Convert.ToDouble(doubleVal);
        }

        Console.Write(fomattedValue.ToString());
    }
}

正如其他人指出的那样,您收到错误的原因是因为解析 long ( Int64 )不支持十进制数:

// Only supports whole numbers, throws an exception for decimal places!
(Convert.ToInt64(NightRateLabel.Text) + Convert.ToInt64(NightsLabel.Text)).ToString();

我猜NightRateLabel.Text实际上是一种货币(金钱)价值。 在这种情况下,您应该使用decimal

var nightRate = decimal.Parse(NightRateLabel.Text)

您还可以使用TryParse更优雅地处理故障:

// You can inline this (remove var success = ...) of course, but I'm being verbose to demonstrate:
var success = decimal.TryParse(NightRateLabel.Text, out var nightRate);
if (!success)
{
    // Handle parsing error gracefully: Show feedback to user, etc.
}
else
{
    // Do something with nightRate
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM