我正在使用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。
答案 0 :(得分:3)
double
和float
在内部以缺少许多数字的精确度的方式表示,这意味着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