C#中的Math.Round可以用于整数值吗?
例如,我有整数363C#中的Math.Round可以用于整数值吗?,c#,asp.net,C#,Asp.net,例如,我有整数363 有没有办法让它变成360或365?这是一种黑客行为,但它可以: var rounded = Math.Round(363 / 5f) * 5; 没有内置的东西,你只需要自己编写逻辑代码。这里有一个这样的方法。(下跌更清晰,但上涨是可控的。) 编辑对于负数,逻辑几乎相反 static int RoundUpToFive(int number) { if (number >= 0) return number + (number % 5 >
有没有办法让它变成360或365?这是一种黑客行为,但它可以:
var rounded = Math.Round(363 / 5f) * 5;
没有内置的东西,你只需要自己编写逻辑代码。这里有一个这样的方法。(下跌更清晰,但上涨是可控的。) 编辑对于负数,逻辑几乎相反
static int RoundUpToFive(int number)
{
if (number >= 0)
return number + (number % 5 > 0 ? (5 - number % 5) : 0);
else
return number - (number % 5);
}
static int RoundDownToFive(int number)
{
if (number >= 0)
return number - number % 5;
else
return number + (number % 5 < 0 ? (-5 - number % 5) : 0);
}
静态整数舍入五(整数)
{
如果(数字>=0)
返回编号+(编号%5>0?(5-编号%5):0);
其他的
返回编号-(编号%5);
}
静态整数舍入向下五(整数)
{
如果(数字>=0)
返回编号-编号%5;
其他的
返回编号+(编号%5<0?(-5-编号%5):0);
}
以下是我通常做的事情,这是两种想法的结合:
static int RoundDown(int x, int n) {
return x / n * n;
}
static int Round(int x, int n) {
return (x + n / 2) / n * n;
}
static int RoundUp(int x, int n) {
return (x + n - 1) / n * n;
}
(假设为正数;将其扩展为负数是很简单的。)
[编辑]
根据LLVM,Round函数也可以这样编写:
int Round(int x, int n) {
int z = (x + n / 2);
return z - (z % n);
}
您可能会发现它更优雅。我是sry。但我只是不知道什么是5f?它指定5为浮点值。它的含义与
(float)5
相同。您必须使用浮点值进行除法,否则结果将被截断为整数,随后将始终向下舍入。请注意,当OP(可能)在查找int
时,这将计算为double
。将其放入扩展方法将非常糟糕。然后您只需舍入整数即可var i=363`然后`i.rounded()`得到你所需要的。@John:没有理由它不能被转换成int
。你想要360还是365?(向上或向下舍入)您的_num%5==0?your_num:your_num+(your_num%5)@Ani,没有检查底片。会把水弄脏一点。
int Round(int x, int n) {
int z = (x + n / 2);
return z - (z % n);
}