c#数学函数不计算

本文关键字:计算 函数 | 更新日期: 2023-09-27 18:19:41

我有一个简单的数学函数

    private int Doyle(LogArguments args)
    {
        return Convert.ToInt32(Math.Round(Math.Pow((args.Diameter - 4) , 2.0) * (args.Length / 16),0));
    }

它应该总是返回int>0,但我的问题是如果args.Length<=16位CCD_ 2=0。我试过:

decimal d = args.length/16

double d = args.length/16;

当长度<16

c#数学函数不计算

如果args.lengthint,则不管输出变量的类型是什么,都要进行整数除法。要强制进行decimal除法,最简单的方法是在分母中指定一个十进制文字:

decimal d = args.length / 16M;

或者对于double,使用浮点文字:

double d = args.length / 16.0;
double d = args.length/16;

当长度<16

这是因为args。Length和16都是整数。得到整数除法(结果0),即,然后转换为双精度。相反,尝试

double d = args.length/16.0;

如果您试图乘以一个浮点值,例如:

5 / 16 = 0.3125

然后你应该把(args.Length / 16)变成(args.Length / 16f)

这将迫使除法作为浮点进行,并保留任何余数。如果不添加f,它将作为截断余数的整数除法进行,因此任何小于16的值都将小于1,并减为0。