作为一名测绘专业的学生,在内业计算中经常遇到遇到小数点后保留几位小数的问题。根据《工程测量实验教程》(王宇会 著)一书,内业计算按“四舍六入,五前单进双舍(或称奇进偶不进)”的取舍规则进行尾数的取舍。如数据1.1235和1.1245小数点后保留三位时,均应为1.124

//四舍六入五成双的基于C++11的实现

//C++11中sprintf、strncpy由于VS2015会报错,所以在这里改用sprintf_s、strncpy_s

#include #include #include using namespace std;

const int n = 1000; //设置要保留的位数

char s1[20];

char s2[20];

int main()

{

double a1, a2, a3;

cin >> a1;

a2 = a1*n; //将输入的数据乘以n,使得小数点后的第一位使我们要判断的是否为5的数

sprintf_s(s1, "%lf", a2); //将double类型的a2打印到字符数组s1里面去

int b = strcspn(s1, "."); //整型b即为小数点在字符数组中序号

char c = s1[b + 1]; //字符c即为小数点后一位数

if (c'5') //如果c大于5,则进1

{

strncpy_s(s2, s1, b);

a3 = atof(s2) + 1;

}

else

{

//如果c大、等于5,则对前一位数进行判断奇偶

c = s1[b - 1];

if ((c % 2) != 0) //C前一位为奇则进1

{

strncpy_s(s2, s1, b);

a3 = atof(s2) + 1;

}

else

{

strncpy_s(s2, s1, b);

a3 = atof(s2);

}

}

}

a3 = a3 / n;

cout << a3 << endl; //输出结果

return 0;

}

//四舍六入五成双的C++实现

虽然实现了这个功能,不过有时候觉得还是很难用,所以将上面的程序封装成函数

//四舍六入五成双的基于C++11的实现封装成函数

#include #include #include using namespace std;

double SSLR(double s1, int a)

{

int n;

switch (a)

{

case 1:

n = 10; break;

case 2:

n = 100; break;

case 3:

n = 1000; break;

default:

n = 1;

break;

}

//设置要保留的位数

double s2 = s1*n; //将输入的数据乘以n,使得小数点后的第一位使我们要判断的是否为5的数

double s3;

char c1[20];

char c2[20];

sprintf_s(c1, "%lf", s2); //将double类型的a2打印到字符数组s1里面去

int b = strcspn(c1, "."); //整型b即为小数点在字符数组中序号

char c = c1[b + 1]; //字符c即为小数点后一位数

if (c'5') //如果c大于5,则进1

{

strncpy_s(c2, c1, b);

s3 = atof(c2) + 1;

}

else

{

//如果c大、等于5,则对前一位数进行判断奇偶

c = c1[b - 1];

if ((c % 2) != 0) //C前一位为奇则进1

{

strncpy_s(c2, c1, b);

s3 = atof(c2) + 1;

}

else

{

strncpy_s(c2, c1, b);

s3 = atof(c2);

}

}

}

s3 = s3 / n;

//cout << s3 << endl; //输出结果

return s3;

}

int main()

{

double d1, d2, d3;

cin >> d1;

d2=SSLR(d1);

cout << d2 << endl;

return 0;

}

/***手动分割线    2018.5.1修改***/

其实上面的SSLR函数代码也可以根据不同的需要来进行修改。

参加过一次测绘程序程序设计竞赛后,便发现这个程序还不够完善,因为double类型默认输出位数只有六位,保留三位小数后超出了六位输出就会出问题(我是在计算前方交会的时候遇到的),便只好用头文件iomanip里的setprcision来解决了

#include #include "shuce.h"

#include #include //#include using namespace std;

int main()

{

char c[16];

long double s;

cin >> s;

double s1=SSLR(s, 3);

sprintf_s(c,"%lf",s1);

//int l0 = strlen(c);

int l = strcpy_s(c,".");

cout << s << endl;;

cout << fixed<

欢迎各位留言提意见

四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现相关推荐

  1. “四舍六入五成双规则” 与 C语言如何实现“四舍五入”

    1.四舍六入五成双规则 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是"四舍六入五成双",也即"4舍6入 ...

  2. “银行家算法”讲解,在前端表格中利用自定义公式实现“四舍六入五成双”

    银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的"利润"就是这其中的利息差额. 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息 ...

  3. c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000;        //宏定义保留3位小数 double fun(double ...

  4. C语言中的四舍六入五成双 和 四舍五入

    %.mf 可以让浮点数保留 m 位小数输出 保留的是精度为 四舍六入五成双 就是 5以下舍弃 5以上进位 而当下一位为5时要讨论: 被化简的小数位后面一位的数字等于5时 要看5前面的数字,若是奇数则进 ...

  5. java 四舍六入五成双_EXCEL实现四舍六入五成双修约规则的方法

    中国药典的修约原则是四舍六入五成双(只是中国药典这样,USP.EP都是四舍五入).四舍六入五成双的修约原则为: 1. 被修约的数字小于5时,该数字舍去: 2. 被修约的数字大于5时,则进位: 3. 被 ...

  6. Excel中四舍六入五成双的最佳函数算法

    https://jingyan.baidu.com/article/219f4bf7e3c1f2de442d3812.html 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留 ...

  7. 四舍五入 与 四舍六入五成双

    今天公司有个同事在调一个asp程序时候,发现 round(1.25,1) 返回的竟然是1.2 而不是1.3 查询了一下CSDN的帖子,发现这竟然是一个Bug: http://search.csdn.n ...

  8. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...

    做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...

  9. java 四舍六入五成双

    四舍六入五成双的规则: 1. 被修约的数字小于5时,该数字舍去: 2. 被修约的数字大于5时,则进位: 3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数 ...

最新文章

  1. 抵御故障引发系统性失控的基本原则:混沌工程
  2. 如何用python画出中国地图-用Python画一个中国地图
  3. Bootstrap学习遇到的role属性--- 无障碍网页应用属性
  4. Sparsity稀疏编码(一)
  5. 程序员面试系列——合并排序(递归实现)
  6. windows等宽字体
  7. SpringMVC 传递相同名称的参数的最佳方法
  8. 多媒体指令(内存拷贝加速)
  9. 突破技术管理,IT人中年危机变契机
  10. mysql 执行计划 改变_数据量增加导致mysql执行计划改变解决_MySQL
  11. 光伏并网matlab,基于MATLAB的光伏并网设计
  12. 模型可视化 netron
  13. VSPD及友善串口调试助手下载地址
  14. 俞敏洪:这是一个创业的大时代
  15. android 使用Path实现涂鸦效果
  16. 解决电脑搜不到WiFi6无线路由信号问题
  17. 医院网络营销到底该怎么做
  18. 零元投资,快速赚钱的好项目,美妆溪妍值得你选择
  19. 安装 Unity 个人免费版
  20. PID算法详细解析——基于单片机

热门文章

  1. 大学计算机实验报告虚拟机,1虚拟机安装和使用实验报告书
  2. 美术基础对学3D游戏建模重要吗?零基础如何学3D建模
  3. 电脑蓝牙耳机,蓝牙耳机,详细教您蓝牙耳机怎么连接电脑
  4. 傻子,疯子,一根筋的人才能创业成功!
  5. 安灯(Andon)系统,生产车间的得力助手
  6. Python爬取美女主播图片适合初学者
  7. java isprime函数_翁恺老师零基础java课程函数章第一题分解质因数
  8. maven-default-http-blocker
  9. 走进递归经典——汉诺塔问题详解
  10. iOS总体框架介绍和详尽说明