C++实现四舍五入的几种方法

保留整数 

- 只需要得到四舍五入的输出

- 需要得到四舍五入的结果

方法1:写一个函数

方法2:调用中的函数round

保留小数点后k位 

- 只需要得到四舍五入的输出

方法1:利用printf函数

方法2:利用库的fixed和setpricision函数

- 需要得到四舍五入的结果


保留整数 

- 只需要得到四舍五入的输出

若只需要得到四舍五入的输出,那我们可以利用printf来进行输出,选择保留小数点后0位,即可达到四舍五入的目的

#include <iostream>

using namespace std;

int main()
{
  double a = 1.4999999;
  double b = 1.5000001;
  double n_a = -1.4999999;
  double n_b = -1.5000001;
    
  printf("%.0f\n", a);    // 1
  printf("%.0f\n", b);    // 2
  printf("%.0f\n", n_a);    // -1
  printf("%.0f\n", n_b);    // -2
  return 0;
}

- 需要得到四舍五入的结果

方法1:写一个函数

只需要写一个函数判断当前数减去其整数部分是否大于等于0.5,若是则其整数部分进1,否直接输出其整数部分

#include <iostream>

using namespace std;

// 用于四舍五入
int round_0 (double n)
{
  // 若为负数,则先化为正数再进行四舍五入
  if (n > 0)
    return n - int(n) >= 0.5 ? int(n)+1 : int(n);
  else
    return -n - int(-n) >= 0.5 ? -(int(-n) + 1) : -int(-n);
}

int main()
{
  double a = 1.4999999;    
  double b = 1.5000001;   
  double n_a = -1.4999999;    
  double n_b = -1.5000001;    
  cout << round_0(a) << endl;    // 1
  cout << round_0(b) << endl;    // 2
  cout << round_0(n_a) << endl;    // -1
  cout << round_0(n_b) << endl;    // -2
  return 0;
}

方法2:调用<cmath>中的函数round

头文件<math.h>或<cmath>中的round函数

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
  double a = 1.4999999;
  double b = 1.5000001;
  double n_a = -1.4999999;    
  double n_b = -1.5000001; 
  cout << round(a) << endl;    // 1
  cout << round(b) << endl;    // 2
  cout << round(n_a) << endl;    // -1
  cout << round(n_b) << endl;    // -2
  return 0;
}

保留小数点后k位 


- 只需要得到四舍五入的输出

方法1:利用printf函数

类似的,我们可以利用printf函数来完成自动的四舍五入过程。

若保留两位小数,那么我们可以直接使用printf输入小数点后两位即可。注意如果输出结果的0不够小数点后两位,会自动补齐到小数点后两位。

#include <iostream>

using namespace std;

int main()
{
  double a = 1.499;
  double b = 1.500;
  double c = 1.48;
  double d = 1.5;
  double n_a = -1.499;
  double n_b = -1.500;
    
  printf("%.2f\n", a);    // 1.50
  printf("%.2f\n", b);    // 1.50
  printf("%.2f\n", c);    // 1.48
  printf("%.2f\n", d);    // 1.50
  printf("%.2f\n", n_a);    // -1.50
  printf("%.2f\n", n_b);    // -1.50
  return 0;
}

方法2:利用<iomanip>库的fixed和setpricision函数

setpricision()接受一个整型参数,表示保留多少位有效数字;fixed(std::fixed)表示用于setpricision的有效数字针对的是小数点后的有效数字。这两个函数都是作用于cout, cin之类的IO流

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  double a = 1.499;
  double b = 1.500;
  double c = 1.48;
  double d = 1.5;
  double n_a = -1.499;
  double n_b = -1.500;
    
  cout << fixed << setprecision(2) << a << endl;    // 1.50
  cout << fixed << setprecision(2) << b << endl;    // 1.50
  cout << fixed << setprecision(2) << c << endl;    // 1.48
  cout << fixed << setprecision(2) << d << endl;    // 1.50
  cout << fixed << setprecision(2) << n_a << endl;    // -1.50
  cout << fixed << setprecision(2) << n_b << endl;    // -1/50
  return 0;
}

- 需要得到四舍五入的结果

要得到四舍五入小数点后的结果,我们可以将小数转换为整数来处理,然后再转换为小数。例如我们需要将1.2345这个数保留小数点后两位四舍五入,我们可以先将其乘以100转换为123.45,然后套用整数的方法来进行四舍五入,再将其除以100转换为小数。

#include <iostream>

using namespace std;

// 用于四舍五入
int round_0 (double n)
{
  // 若为负数,则先化为正数再进行四舍五入
  if (n > 0)
    return n - int(n) >= 0.5 ? int(n)+1 : int(n);
  else
    return -n - int(-n) >= 0.5 ? -(int(-n) + 1) : -int(-n);
}

int main()
{
  double a = 1.2345;
  double b = 1.2355;
  double n_a = -1.2345;
  double n_b = -1.2355;

  a = round_0(a * 100.0) / 100.0;
  b = round_0(b * 100.0) / 100.0;
  n_a = round_0(n_a * 100.0) / 100.0;
  n_b = round_0(n_b * 100.0) / 100.0;

  cout << a << endl;  // 1.23
  cout << b << endl;  // 1.24
  cout << n_a << endl;  //-1.23
  cout << n_b << endl;  // -1.24
  return 0;
}

  • 52
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值