我在尝试修复简单的c#代码时遇到了麻烦。这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoonGravity
{
class MoonGravity
{
static void Main(string[] args)
{
int number = Convert.ToInt32(Console.ReadLine());
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
}
}
}
我需要输出单个浮点值,所有值必须在浮点后精确到3位精度。我得到了它的工作,唯一的问题是,如果我没有输入整数,它会崩溃。这是我得到的错误。
未处理的异常:System.FormatException:输入字符串的格式不正确。 at System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal) 在System.Number.ParseInt32(String s,NumberStyles样式,NumberFormatInfo信息) 在System.Convert.ToInt32(字符串值) 在MoonGravity.MoonGravity.Main(String [] args)中...... 2015 \ Projects \ ConsoleApplication3 \ ConsoleApplication3 \ Program.cs:第13行
我知道这个问题来自我的Convert.ToInt32
,我试图修复它,但我无法解决。谢谢你的帮助。
答案 0 :(得分:3)
如果您希望能够输入非整数,请执行其他转换。 .NET中还提供了一些方法,它们会尝试将输入解析为另一种类型,如果成功则给出布尔返回值,而不是抛出异常。使用try parse在引入用户输入时尤其方便,而您不知道他们可能会尝试给您什么。然后,您可以优雅地处理给出错误或无效输入的可能条件,而不是捕获格式异常等。 MSDN Single Try Parse
static void Main(string[] args)
{
float number;
var success = Single.TryParse(Console.ReadLine(), number);
if(success)
{
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
}
else
{
Console.WriteLine("Only numbers allowed.");
}
}
答案 1 :(得分:2)
那是因为您的number
是int
。尝试将其更改为float
。
float number = (float)Convert.ToDouble(Console.ReadLine());
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
答案 2 :(得分:0)
以下行不正确:
int number = Convert.ToInt32(Console.ReadLine());
一个整数(来自拉丁整数,意思是“整数”)是一个数字 可以在没有小数分量的情况下编写。例如,21,4,0, 和-2048是整数,而9.75,5 1/2和√2不是。
将其更改为十进制,双精度或浮动
decimal number = Convert.ToDecimal(Console.ReadLine());