Cannot implicitly convert type 'double' to 'long'

匿名 (未验证) 提交于 2019-12-03 02:24:01

问题:

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!

回答1:

The Math.Pow method returns a double, not a long so you will need to change your code to account for this:

x = (long)(u % Math.Pow(10, m)); 

This code will cast the double result from Math.Pow and assign that value to x. Keep in mind that you will lose all the precision providided by decimal (which is a floating-point type and can represent decimal values). Casting to long will truncate everything after the decimal point.



回答2:

Math.Pow returns a double.

the Right Hand Side (RHS) of % can only be an integer type.

you need

x = u % (long)Math.Pow(10, m);///<----here y = u / (long)Math.Pow(10, m);///here w = v % (long)Math.Pow(10, m);///here z = v / (long)Math.Pow(10, m);///here 

Additionally, You have the possibility of dividing by zero and destroying the universe.



回答3:

Math.Pow returns a double. You could explicitly cast to long, for example

x = u % (long)Math.Pow(10, m); 

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.



回答4:

Change types

long x; long y; long w; long z;  

to

double x; double y; double w; double z;  

Or make use of

Convert.ToInt64 


回答5:

You cant' cast implicitly double to long, use (long) cast or change type of variable declaration to double.



回答6:

Also you can use this:

Convert.ToInt64( u % Math.Pow(10, m) ) 

Source here



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!