[英]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.