Math.Floor就整数而言

时间:2014-04-10 08:49:40

标签: c# math

我正在使用Math.Floor方法找出编号为b的次数。在这个具体的例子中,变量具有以下值:

double a = 1.2; 

double b = 0.1;

double c = Math.Floor(a / b) * b;

我认为它会返回c = 11而不是c = 12。我想它与舍入有关,但我怎样才能使它正常工作?当我将数字a提高到1,21时,它返回12。

3 个答案:

答案 0 :(得分:3)

doublefloat在内部以缺少许多数字的精确度的方式表示,这意味着a可能不完全是1.2(但是,例如,1.199999999 ......)和b不完全是0.1

如果您需要精确的精确度,对于没有金钱等误差范围的数量,请使用decimal

答案 1 :(得分:0)

您的代码的结果是1.1。 我假设你想得到1.2。 你需要使用

double c = Math.Ceiling(a / b) * b;

答案 2 :(得分:0)

了解Math.Floor的工作原理here。 ..基本上,它向下舍入......

我的猜测是,对于双打,你并没有真正得到12作为分区(即使这似乎有效:double d = a/b; // d=12)。

Solal 指向相同,并给出了关于小数的好建议:)

以下是小数的结果:

decimal a = 1.2m; 
decimal b = 0.1m;
decimal c = Math.Floor(a / b) ; // c =12