C# 在C中从十进制转换为双精度时出错#
我犯了一个错误,我不知道为什么。我不觉得有必要改成双倍,还是我应该改成双倍?我现在真的很困惑 参数1:无法从“十进制”转换为“双精度”C# 在C中从十进制转换为双精度时出错#,c#,calculator,C#,Calculator,我犯了一个错误,我不知道为什么。我不觉得有必要改成双倍,还是我应该改成双倍?我现在真的很困惑 参数1:无法从“十进制”转换为“双精度” static void Main(string[] args) { Console.Write("speed: "); string speed = Console.ReadLine(); Console.Write("Gammafaktor: "); string Gammaf
static void Main(string[] args)
{
Console.Write("speed: ");
string speed = Console.ReadLine();
Console.Write("Gammafaktor: ");
string Gammafaktor = Console.ReadLine();
{
}
var gamma1 = Convert.ToDecimal(Gammafaktor);
var speed1 = Convert.ToDecimal(speed);
if ( speed1 !=0 )
{
var calc = 1m / Convert.ToDecimal(Math.Sqrt(1 - speed1 * speed1));
Console.WriteLine(calc);
}
}
}
}您最有可能看到: CS1503参数1:无法从“十进制”转换为“双精度”
static void Main(string[] args)
{
Console.Write("speed: ");
string speed = Console.ReadLine();
Console.Write("Gammafaktor: ");
string Gammafaktor = Console.ReadLine();
{
}
var gamma1 = Convert.ToDecimal(Gammafaktor);
var speed1 = Convert.ToDecimal(speed);
if ( speed1 !=0 )
{
var calc = 1m / Convert.ToDecimal(Math.Sqrt(1 - speed1 * speed1));
Console.WriteLine(calc);
}
}
}
在使用Math.Sqrt
调用的行上,或者(如果您将作业移到本地):
CS0266无法将类型“decimal”隐式转换为“double”。存在显式转换(是否缺少强制转换?)
Math.Sqrt
接受一个double
,而不是decimal
,并且从decimal
到double
的转换是显式的,而不是隐式的-这意味着它不会在您不知道的情况下自动执行;因此:
var calc = 1m / Convert.ToDecimal(Math.Sqrt((double)(1 - speed1 * speed1)));
作为旁注。。。除非
speed1
始终在0和1之间,否则这种计算看起来很奇怪(也很危险)。供将来参考-连续测量(如速度)使用double
,离散测量(如货币)使用decimal
。