加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 不能将类型“double”隐式转换为“long”

发布时间:2020-12-15 06:55:43 所属栏目:百科 来源:网络整理
导读:在这段代码中,我发现上面的错误在我评论的行. 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; cou
在这段代码中,我发现上面的错误在我评论的行.
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;
    }
}

有什么问题?谢谢!

解决方法

Math.Pow方法返回一个double,而不是一个long,所以你需要改变你的代码来解决这个问题:
x = (long)(u % Math.Pow(10,m));

该代码将从Math.Pow投射双重结果,并将该值分配给x.请记住,您将丢失由十进制提供的所有精度(这是一个浮点型,可以表示十进制值).铸造长时间会截断小数点后的所有内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读