如何使用 Math.DivRem() 获得双精度值?

问题描述 投票:0回答:2

我无法在 C# 中显示双精度值

Math.DivRem(double money, int number, out int remain);
c# parsing modulo
2个回答
0
投票
private static Tuple<int, double> DivRem(double left, double right)
{
    return Tuple.Create((int)Math.Floor(left / right), left % right);
}

-1
投票

Math.DivRem Method 仅与 Int64 和 Int32 兼容,这意味着您不能使用 double、float 或任何带小数的数字数据类型。

根据您要寻找的内容,这是获取双精度数的商和余数的另外两种方法:

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.DivRem 与“双精度”一起使用的一种解决方法是,将两边都乘以一个常数,例如 100 000。得到余数后,将其除以该常数。

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
© www.soinside.com 2019 - 2024. All rights reserved.