四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现
作为一名测绘专业的学生,在内业计算中经常遇到遇到小数点后保留几位小数的问题。根据《工程测量实验教程》(王宇会 著)一书,内业计算按“四舍六入,五前单进双舍(或称奇进偶不进)”的取舍规则进行尾数的取舍。如数据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++实现相关推荐
- “四舍六入五成双规则” 与 C语言如何实现“四舍五入”
1.四舍六入五成双规则 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是"四舍六入五成双",也即"4舍6入 ...
- “银行家算法”讲解,在前端表格中利用自定义公式实现“四舍六入五成双”
银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的"利润"就是这其中的利息差额. 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息 ...
- c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...
复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000; //宏定义保留3位小数 double fun(double ...
- C语言中的四舍六入五成双 和 四舍五入
%.mf 可以让浮点数保留 m 位小数输出 保留的是精度为 四舍六入五成双 就是 5以下舍弃 5以上进位 而当下一位为5时要讨论: 被化简的小数位后面一位的数字等于5时 要看5前面的数字,若是奇数则进 ...
- java 四舍六入五成双_EXCEL实现四舍六入五成双修约规则的方法
中国药典的修约原则是四舍六入五成双(只是中国药典这样,USP.EP都是四舍五入).四舍六入五成双的修约原则为: 1. 被修约的数字小于5时,该数字舍去: 2. 被修约的数字大于5时,则进位: 3. 被 ...
- Excel中四舍六入五成双的最佳函数算法
https://jingyan.baidu.com/article/219f4bf7e3c1f2de442d3812.html 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留 ...
- 四舍五入 与 四舍六入五成双
今天公司有个同事在调一个asp程序时候,发现 round(1.25,1) 返回的竟然是1.2 而不是1.3 查询了一下CSDN的帖子,发现这竟然是一个Bug: http://search.csdn.n ...
- sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...
- java 四舍六入五成双
四舍六入五成双的规则: 1. 被修约的数字小于5时,该数字舍去: 2. 被修约的数字大于5时,则进位: 3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数 ...
最新文章
- 抵御故障引发系统性失控的基本原则:混沌工程
- 如何用python画出中国地图-用Python画一个中国地图
- Bootstrap学习遇到的role属性--- 无障碍网页应用属性
- Sparsity稀疏编码(一)
- 程序员面试系列——合并排序(递归实现)
- windows等宽字体
- SpringMVC 传递相同名称的参数的最佳方法
- 多媒体指令(内存拷贝加速)
- 突破技术管理,IT人中年危机变契机
- mysql 执行计划 改变_数据量增加导致mysql执行计划改变解决_MySQL
- 光伏并网matlab,基于MATLAB的光伏并网设计
- 模型可视化 netron
- VSPD及友善串口调试助手下载地址
- 俞敏洪:这是一个创业的大时代
- android 使用Path实现涂鸦效果
- 解决电脑搜不到WiFi6无线路由信号问题
- 医院网络营销到底该怎么做
- 零元投资,快速赚钱的好项目,美妆溪妍值得你选择
- 安装 Unity 个人免费版
- PID算法详细解析——基于单片机