我怎么能有一个双值使用Math.DivRem()?



我不能在c#中显示双精度值

Math.DivRem(double money, int number, out int remain);
private static Tuple<int, double> DivRem(double left, double right)
{
return Tuple.Create((int)Math.Floor(left / right), left % right);
}

使用Math.Floor代替Convert.ToInt32,因为后者将四舍五入到最接近的偶数。

数学。DivRem方法只兼容Int64和Int32,这意味着你不能使用双精度,浮点数或任何数字数据类型与小数。

根据需要,还有另外两种方法可以获得双精度数的商和余数:

double a = 20.1;
double b = 4.93;
double remainder = a % b; // Returns 0.380...
double quotient = a / b; // Returns 4,077...

如果你想让余数或商数为int,只需使用

int result = Convert.ToInt32(quotient); // Returns 4

或者让它更有效率

int result = ConvertToInt32(a / b); // Returns 4

编辑

使用Math的一个变通方法。与"双"字相乘,是通过两边乘以一个常数,例如100000。得到余数后,将余数除以常数。

double money = 5.515;
int number = 2;
int constant = 100000;
Math.DivRem(Convert.ToInt32(money * constant), number * constant, out int remain); 
// Divides 551500 with 200000
// remain = 151500
// For double
double d = (double) remain / (double) constant; // Return 1,515
// For int
remain /= constant; // Return 1

双编辑

当处理双精度和整型组合时,使用这个代替Math.DivRem()

double money = 12.15;
int number = 5;
double remainder = money % number; // Return 2,15...
int remainder = (int)(money % number); // Return 2

最新更新