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, 你可以换做其他的类型。自己多测几次就明白了

(0)

相关推荐

  • 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 方法来过滤小数,但是不知道跟前面那种转换成整数后再执行哪种效率高,好!还

随机推荐