C# 数学,全数字地板
我用数学地板法来计算数字a在数字b中能出现多少次。在此具体示例中,变量使用以下值:C# 数学,全数字地板,c#,math,C#,Math,我用数学地板法来计算数字a在数字b中能出现多少次。在此具体示例中,变量使用以下值: double a = 1.2; double b = 0.1; double c = Math.Floor(a / b) * b; 这将返回c=11,而不是我认为会返回的c=12。我想这和舍入有关,但我怎样才能让它正常工作呢?当我将数字a提高到1,21时,它返回12。代码的结果是1.1。 我假设您想要获得1.2。 你需要使用 double c=数学上限(a/b)*b; double和float的内部表示方
double a = 1.2;
double b = 0.1;
double c = Math.Floor(a / b) * b;
这将返回c=11,而不是我认为会返回的c=12。我想这和舍入有关,但我怎样才能让它正常工作呢?当我将数字a提高到1,21时,它返回12。代码的结果是
1.1
。
我假设您想要获得1.2
。
你需要使用
double c=数学上限(a/b)*b;
double
和float
的内部表示方式对许多数字来说都不够精确,这意味着a
可能不完全是1.2
(但是,比如说,1.199999999…)和b
不完全是0.1
如果您想要精确的精度,对于没有误差范围(如货币)的数量,请使用decimal
看看Math.Floor是如何工作的。。基本上,它是四舍五入的
我的猜测是,使用double时,实际上不会得到12作为除法(尽管这似乎是可行的:double d=a/b;//d=12
)
Solal指出了同样的问题,并给出了关于小数点的好建议:)
以下是小数的情况:
decimal a = 1.2m;
decimal b = 0.1m;
decimal c = Math.Floor(a / b) ; // c =12
即使是decimal
也不能给出“精确的精度”。如果是这样,那么下面的代码将打印“70”,但它会打印“69”:Console.WriteLine(数学地板(10m/(1m/7m))代码>它没有无限的精度,因为这需要无限的内存,但它对它所能表示的内容有精确的精度,即所有符合其28位小数的内容。好的,我将尝试小数。然而,也许还有其他方法可以解决我的问题。我有的是一段东西。这个物体有一个最小的部分,可以分成,比如说0.1米。所以如果我得到1.19m,我需要返回1.1m。当我得到1.2m,那么1.2m是正确的结果。所以小数有帮助。谢谢!好的,我试试小数。然而,也许还有其他方法可以解决我的问题。我有的是一段东西。这个物体有一个最小的部分,可以分成,比如说0.1米。所以如果我得到1.19m,我需要返回1.1m。当我得到1.2m,那么1.2m是正确的结果。