Một phương pháp chung để làm tròn một số đến bội số của một số khác, làm tròn away from zero.
Đối với số nguyên
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step/2))/step) * step;
else
return ((num - (step/2))/step) * step;
}
Đối với phao
float RoundNum(float num, float step)
{
if (num >= 0)
return floor((num + step/2)/step) * step;
else
return ceil((num - step/2)/step) * step;
}
Tôi biết một số bộ phận có vẻ phản trực giác hay không rất tối ưu. Tôi đã cố gắng đúc (num + bước/2) đến một int, nhưng điều này đã cho kết quả sai cho phao âm ((int) -12.0000 = -11
và như vậy). Dù sao đây là một vài trường hợp tôi thử nghiệm:
- bất kỳ số tròn lại bước 1 nên tự
- -3 làm tròn đến bước 2 = -4
- -2 tròn lại bước 2 = -2
- 3 được làm tròn thành bước 2 = 4
- 2 làm tròn thành bước 2 = 2
- -2.3 làm tròn thành bước 0,2 = -2.4
- -2,4 làm tròn đến bước 0,2 = -2,4
- 2,3 làm tròn đến bước 0,2 = 2,4
- 2,4 làm tròn đến bước 0,2 = 2,4
Nguồn
2014-10-15 09:54:23
Tôi đã thử Math.floor – dhardy
Floor là sàn được cho đôi. – evanmcdonnal
chia cho 10, tròn, nhân với 10 –