【发布时间】:2012-01-13 01:11:25
【问题描述】:
如何将值四舍五入到最接近的整数?
例如:
1.1 => 1
1.5 => 2
1.9 => 2
“Math.Ceiling()”对我没有帮助。有什么想法吗?
【问题讨论】:
-
Math.Round() 可以解决问题。
如何将值四舍五入到最接近的整数?
例如:
1.1 => 1
1.5 => 2
1.9 => 2
“Math.Ceiling()”对我没有帮助。有什么想法吗?
【问题讨论】:
请参阅official documentation 了解更多信息。例如:
基本上你给Math.Round方法三个参数。
示例代码:
var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3
如果您希望将 0.5 值向上取整,则需要 MidpointRounding.AwayFromZero。不幸的是,这不是Math.Round() 的默认行为。如果使用MidpointRounding.ToEven(默认值),则该值将四舍五入为最接近的偶数数(1.5 四舍五入为2,但2.5 也四舍五入为2)。
【讨论】:
away from zero也意味着-1.5将四舍五入为-2。
【讨论】:
您需要Math.Round,而不是Math.Ceiling。 Ceiling 总是向上“四舍五入”,而 Round 根据小数点后的值向上或向下舍入。
【讨论】:
有这本手册,也有点可爱:
double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;
int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);
只需将 0.5 加到任何数字上,然后将其转换为 int(或将其取整),它就会在数学上正确四舍五入:D
【讨论】:
您可以按照其他人的建议(推荐)使用 Math.Round,或者您可以添加 0.5 并强制转换为 int(这将删除小数部分)。
double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1
double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
【讨论】:
只是一个提醒。小心双标。
Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2
【讨论】:
你有 Math.Round 函数,它完全符合你的要求。
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
【讨论】:
1.5 作为值呢?您需要更多参数。
这将四舍五入到最接近的 5 或者如果它已经被 5 整除则不改变
public static double R(double x)
{
// markup to nearest 5
return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}
【讨论】:
我一直在寻找这个,但我的示例是取一个数字,例如 4.2769,然后将其放在一个跨度中,即 4.3。不完全相同,但如果这有帮助:
Model.Statistics.AverageReview <= it's just a double from the model
然后:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
等等……
【讨论】:
使用Math.Round:
double roundedValue = Math.Round(value, 0)
【讨论】:
var roundedVal = Math.Round(2.5, 0);
它会给出结果:
var roundedVal = 3
【讨论】:
使用Math.Round(number) 四舍五入到最接近的整数。
【讨论】:
如果您使用整数而不是浮点数,这就是方法。
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
这里 "numr" 和 "denr" 都是无符号整数。
【讨论】:
编写你自己的回合方法。类似的,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end
【讨论】:
decimal RoundTotal = Total - (int)Total;
if ((double)RoundTotal <= .50)
Total = (int)Total;
else
Total = (int)Total + 1;
lblTotal.Text = Total.ToString();
【讨论】: