你如何围绕一个浮点值进行舍入,让我们说小数点后的单个数字,例如给定18.0-18.4我想显示18.0或给出18.5-19.0显示19.0等? 谢谢大家
答案 0 :(得分:1)
std::round()
使用floor(x + 0.5)
的情况会失败:
负数。当然,代码可以尝试ceil(x - 0.5)
。
总和x+0.5
可能会创建一个新整数的舍入答案:FP数小于0.5。 x
的ULP(最小二进制数字)为0.5或1.0的某些值。
IOWs,代码需要确保0.5
添加不需要额外的精确度。
以下是round_alt()
应该round()
不存在的候选人。 round_alt()
没有这些问题。
double round_alt(double x) {
double ipart;
// break into integer and fraction parts
double fpart = modf(x, &ipart);
if (fpart != 0.0) {
if (x >= 0.5) {
ipart += floor(fpart + 0.5);
} else if (x <= -0.5) {
ipart += ceil(fpart - 0.5);
}
}
return ipart;
}
答案 1 :(得分:0)
我会使用floor()函数。由于round()可能无法在您的编译器上实现。
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
double input = 18.0;
for (int i = 0; i < 10; i++, input += 0.1 )
{
double output = floor( input + 0.5 );
printf( "Input:%f Output:%f\n", input, output );
}
getchar();
return 0;
}
输出就是这样。