两种方法
方法1: 乘10法
去掉整数部分后,剩余小数*10,乘N次,加上0.5后再除回去,最后return 整数部分+小数部分
#include<iostream> #include<cmath> using namespace std; //用long long 取整 /*double round(double number, unsigned int bits) { long long integerpart = number;//取整数 number -= integerpart; for (unsigned int i = 0; i < bits; ++i)//取整后的小数进行乘10处理 { number *= 10; } number = (long long)(number + 0.5); for (unsigned int i=0;i<bits;++i) { number /= 10; } return integerpart + number; }*/ int main() { //方法一:乘10法 printf("%.2f\n", round(23.54645544545452, 2)); printf("%.3f\n", round(23.54645544545452, 3)); printf("%.4f\n", round(23.54645544545452, 4)); printf("%.5f\n", round(23.54645544545452, 5)); printf("%.6f\n", round(23.54645544545452, 6)); return 0; }
#include<iostream> #include<cmath> using namespace std; //用cmath库中的floor()取整 double round(double number, unsigned int bits) { double integerpart = floor(number); number -= integerpart; for (unsigned int i = 0; i < bits; ++i) { number *= 10; } number = floor(number + 0.5); for (unsigned int i = 0; i < bits; ++i) { number /= 10; } return integerpart + number; } int main() { //方法一:乘10法 printf("%.2f\n", round(23.54645544545452, 2)); printf("%.3f\n", round(23.54645544545452, 3)); printf("%.4f\n", round(23.54645544545452, 4)); printf("%.5f\n", round(23.54645544545452, 5)); printf("%.6f\n", round(23.54645544545452, 6)); return 0; }