一个例子是如果输入是3456.7856,那么输出应该是3456.786。
非常感谢你,祝福一天!
答案 0 :(得分:2)
名为printf
的标准库函数可以进行舍入:
#include <stdio.h>
int
main(void) {
double dbl = 3456.7856;
printf("%.3f", dbl);
}
如果您想在某些计算中使用舍入值:
#include <stdio.h>
#include <float.h>
#include <math.h>
double
round_to_3(double dbl);
int
main(void) {
double dbl = 3456.7856, dummy; // dummy will hold the integral part of dbl
// , which we won't use
if(modf(dbl, &dummy)) {
dbl = round_to_3(dbl);
}
// Do some computation
printf("%.3f", dbl);
}
double
round_to_3(double dbl) {
char buffer[1 + 1 + DBL_MAX_10_EXP + 1 + 3 + 1];
// Making sure the buffer is big enough:
//
// 1 for the potential sign
// plus 1 for the leading digit
// plus DBL_MAX_10_EXP for the potential digits before the decimal mark
// plus 1 for the decimal mark
// plus 3 for the digits after the decimal mark
// plus 1 for the ending '\0'
sprintf(buffer, "%.3f", dbl);
sscanf(buffer, "%lf", &dbl);
return dbl;
}
这个解决方案看起来很奇怪,但它不会导致溢出,并提供最大的准确性。
modf(dbl, &intpart) == 0
时你不需要进行舍入,因为与base ^ exponent
相比,重要性通常非常小,在这种情况下是10 ^ DBL_MAX_10_EXP
。({{1}除了按位异或(XOR)