In this code i got the above error in lines i commented.
public double bigzarb(long u, long v)
{
double n;
long x;
long y;
long w;
long z;
string[] i = textBox7.Text.Split(',');
long[] nums = new long[i.Length];
for (int counter = 0; counter < i.Length; counter++)
{
nums[counter] = Convert.ToInt32(i[counter]);
}
u = nums[0];
int firstdigits = Convert.ToInt32(Math.Floor(Math.Log10(u) + 1));
v = nums[1];
int seconddigits = Convert.ToInt32(Math.Floor(Math.Log10(v) + 1));
if (firstdigits >= seconddigits)
{
n = firstdigits;
}
else
{
n = seconddigits;
}
if (u == 0 || v == 0)
{
MessageBox.Show("the Multiply is 0");
}
int intn = Convert.ToInt32(n);
if (intn <= 3)
{
long uv = u * v;
string struv = uv.ToString();
MessageBox.Show(struv);
return uv;
}
else
{
int m =Convert.ToInt32(Math.Floor(n / 2));
x = u % Math.Pow(10, m); // here
y = u / Math.Pow(10, m); // here
w = v % Math.Pow(10, m); // here
z = v / Math.Pow(10, m); // here
long result = bigzarb(x, w) * Math.Pow(10, m) + (bigzarb(x, w) + bigzarb(w, y)) * Math.Pow(10, m) + bigzarb(y, z);///here
textBox1.Text = result.ToString();
return result;
}
}
Whats is the problem? Thanks!
The
Math.Pow
method returns adouble
, not along
so you will need to change your code to account for this:This code will cast the
double
result fromMath.Pow
and assign that value tox
. Keep in mind that you will lose all the precision providided bydecimal
(which is a floating-point type and can represent decimal values). Casting tolong
will truncate everything after the decimal point.You cant' cast implicitly double to long, use (long) cast or change type of variable declaration to double.
Change types
to
Or make use of
Math.Pow returns a double.
the Right Hand Side (RHS) of % can only be an integer type.
you need
Additionally, You have the possibility of dividing by zero and destroying the universe.
Also you can use this:
Source here
Math.Pow returns a double. You could explicitly cast to long, for example
although that is likely not the correct solution. Are you certain that the results that you are after can be properly expressed as a double? If not then change the variables to be declared as doubles rather than longs.