我的程序中有三个数字相乘的问题,即使在BigInteger类型之后也是如此。
我没有得到任何有意义的数字。
请检查以下代码:
using System;
using System.Numerics;
class Program
{
static void Main()
{
denss:
string density;
int den;
Console.WriteLine("Please enter the density value in kg/m3");
density = Console.ReadLine();
bool dens = int.TryParse(density, out den);
if (dens == false)
{
Console.WriteLine("Please enter numbers only");
goto denss;
}
Console.WriteLine(den);
velss:
string velocity;
int vel;
Console.WriteLine("Please enter the velocity value in m/s");
velocity = Console.ReadLine();
bool vels = int.TryParse(velocity, out vel);
if (vels == false)
{
Console.WriteLine("Please enter numbers only");
goto velss;
}
Console.WriteLine(vel);
lengt:
string length;
int len;
Console.WriteLine("Please enter the length value in m");
length = Console.ReadLine();
bool leng = int.TryParse(length, out len);
if (leng == false)
{
Console.WriteLine("Please enter numbers only");
goto lengt;
}
Console.WriteLine(len);
BigInteger rel = den * vel * len;
Console.WriteLine(rel);
if (rel>100000)
Console.WriteLine("turbuelent flow. Reynolds no is ", rel);
else
Console.WriteLine("laminar flow. Reynolds no is ", rel);
Console.ReadKey();
}
}
我得到的输出显示在这张照片中:enter image description here
答案 0 :(得分:4)
在其他问题中,您的主要问题是以下几行:
BigInteger rel = den * vel * len;
此处发生的事情den * vel * len
计算为int
,因为所涉及的所有值均为int
。这个int溢出并且毫无意义。然后将此无意义的数字分配给BigInteger rel
。你需要的是:
BigInteger rel = new BigInteger(den) * new BigInteger(vel) * new BigInteger(len);
或将它们声明为double
,这首先应该是针对此问题域的。
答案 1 :(得分:1)
您实际上并未在控制台上输出值。您用作输出的字符串(WriteLine的第一个参数)必须包含标记,显示将第二个参数(数字)插入字符串的位置。例如:
Console.WriteLine("turbuelent flow. Reynolds no is {0}", rel);
{0}
显示参数应该去的位置。如果要输出多个参数,可以使用{0}
,{1}
等。
实际上,你的代码可以像这样重写一点:
string flowType = "";
if (rel > 100000) flowType = "turbulent";
else flowType = "laminar";
Console.WriteLine("{0} flow. Reynolds no is {1}", flowType, rel);
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/586y06yf(v=vs.110).aspx。