C++数据精度问题(对浮点数保存指定位小数)
1、背景
对浮点数保存指定位小数。比如, 1.123456. 要保存1位小数,,调用方法后, 保存的结果为: 1.1。 再比如,1.98765, 保存2位小数的结果为: 2.00.
2、 解决方案
A、添加头文件
#include <sstream> #include <iomanip>
B、添加命名空间
using namespace std;
C、添加函数
/* 函数名:round /* 函数功能:数据精度计算函数 /* 函数参数:float src:待求精度数 int bits:精度(0表示保留小数点后0位小数,1表示保留1位小数,2:表示保留2位小数) /* 函数返回值:精度求取结果 /* Author: Lee /************************************************************************/ float round(float src, int bits);
函数实现
float CDemo1Dlg::round(float src, int bits) { stringstream ss; ss << fixed << setprecision(bits) << f; ss >> f; return f; }
D、调用方式
CString str2 = L"99.054"; float f2 = (float)_wtof(str2); f2 *= 10; f2 = this->round(f2, 2);
E 、注意
比如, 1.05, double在计算机中表示为 1.0499999997, float表示为1.0500000003, 但其实际都是与1.05相等的。
round方方式对处理的位数为5的情况有例外,比如: 1.05, 处理的结果 可能为1.0499999997。 这里写的是float, 你可以换做其他的类型。自己多测几次就明白了
相关推荐
-
C++数据精度问题(对浮点数保存指定位小数)
1.背景 对浮点数保存指定位小数.比如, 1.123456. 要保存1位小数,,调用方法后, 保存的结果为: 1.1. 再比如,1.98765, 保存2位小数的结果为: 2.00. 2. 解决方案 A.添加头文件 #include <sstream> #include <iomanip> B.添加命名空间 using namespace std; C.添加函数 /* 函数名:round /* 函数功能:数据精度计算函数 /* 函数参数:float src:待求精度数 int bit
-
C++数据精度问题的解决方案(对浮点数保存指定位小数)
1.背景 对浮点数保存指定位小数.比如, 1.123456. 要保存1位小数,,调用方法后, 保存的结果为: 1.1. 再比如,1.98765, 保存2位小数的结果为: 2.00. 2. 解决方案 A.添加头文件 #include <sstream> #include <iomanip> B.添加命名空间 using namespace std; C.添加函数 /*******************************************************
-
python保存两位小数的多种方法汇总
目录 一.保留两位小数 且 做四舍五入处理 1.使用字符串格式化 2.使用python内置的round() 函数 3.使用python内置的decimal模块 二.保留两位小数 且 不做四舍五入处理 1.使用序列中的切片 2.使用re正则匹配模块 总结 一.保留两位小数 且 做四舍五入处理 四舍六入五成双, 四舍六入五凑偶的意思, 根据百度词条的解释如下: (1)当精确位后面一位的数字是1-4的时候,舍去 (2)当精确位后面一位的数字是6-9的时候,进1位 (3)当精确位后面一位的数字是5的,此
-
go浮点数转字符串保留小数点后N位的完美解决方法
最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景 虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意.这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教 // 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果 func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decima
-
Javascript浮点数乘积运算出现多位小数的解决方法
Javascript在进行浮点数的乘积运算,会出现多位小数的情况. 这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它变成语言中也有类似的问题. 原因解释参考自百度知道: 例如:求1038.1-1000 1038.1=10000001110.0001100110011001100110011001100110011001100..... 1000 =1111101000 1038.1转化为二进制是个无限循环小数,1100是
-
Python绘制并保存指定大小图像的方法
绘制直线,三角形,正方形 import matplotlib.pyplot as plt def plotLine(): x = [1,2,3,4,5] y = [3,3,3,3,3] plt.figure(figsize=(100,100),dpi=1) plt.plot(x,y,linewidth=150) plt.axis('off') plt.savefig('C:\\Users\\Administrator\\Desktop\\分形图\\a.jpg',dpi=1) plt.show()
-
python批量修改图片尺寸,并保存指定路径的实现方法
如下所示: import os from PIL import Image filename = os.listdir("D:\\Work\\process\\样本处理\\polyu-all-train") base_dir = "D:\\Work\\process\\样本处理\\polyu-all-train\\" new_dir = "D:\\Work\\process\\样本处理\\polyu\\" size_m = 128 size_n
-
matplotlib 输出保存指定尺寸的图片方法
其实这个问题来源于笔者的横坐标太多了,然后生成的那个figure框框太小,导致坐标重叠,而输出的图片是需要批量保存的,总不能每次都拉长截图吧 所以在plot绘图之前加上了一句 plt.figure(figsize=(10, 5)) 图就变了hhh 然后偶然间有发现了能调节子图也就是subplot性质的一个api蛮有趣的,分享下 plt.subplots_adjust(left=0.09,right=1,wspace=0.25,hspace=0.25,bottom=0.13,top=0.91) 然
-
js浮点数保留两位小数点示例代码(四舍五入)
复制代码 代码如下: var changeTwoDecimal_f= function (floatvar){ var f_x = parseFloat(floatvar); if (isNaN(f_x)){ return '0.00'; } var f_x = Math.round(f_x*100)/100; var s_x = f_x.toString(); var pos_decimal = s_x.indexO
-
js小数运算出现多位小数如何解决
和大家分享一个有趣的测试: 0.1+0.2 == 0.3 //false 顿时郁闷,好吧!原来0.1+0.2变成:0.30000000000000004 再来一个 2.4/0.8 =>2.9999999999999996 没办法换种方式,都转换成整数 (2.4 * 100)/(0.8 * 100) 10.22 现在要减去 0.11 结果值又出现了很多的小数 10.110000000000001,然后我就用了 toFixed 方法来过滤小数,但是不知道跟前面那种转换成整数后再执行哪种效率高,好!还
随机推荐
- Lua教程之弱引用table
- Dreamweaver经典一句话技巧
- iOS中屏幕亮度与闪光灯控制详解
- Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
- 可以读取EXCEL文件的js代码第1/2页
- 解析VC中创建DLL,导出全局变量,函数和类的深入分析
- Ajax异步无刷新对局部数据更新
- 解决微信授权回调页面域名只能设置一个的问题
- Android App仿微信界面切换时Tab图标变色效果的制作方法
- Android开发中自定义ProgressBar控件的方法示例
- 让开发自动化 用 Eclipse 插件提高代码质量
- Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
- 整理Javascript基础语法学习笔记
- jQuery实现倒计时重新发送短信验证码功能示例
- javascript与jquery中跳出循环的区别总结
- Thinkphp 空操作、空控制器、命名空间(详解)
- 浅谈SpringMVC的执行流程
- C#中GraphicsPath的Warp方法用法实例
- MyBatis高级映射学习教程
- 使用C++程序获取新浪行情数据的方法