我的代码是这样的:
取m1小数点后的第m2位并在第m2位后一位四舍五入
double ten,m1;
int m2
ten=pow(10,m2);
m1=m_edit1*ten+0.5;
m1=int(m_edit1)/ten;我用其它的数测试都没有问题可是在测试同m1=4.225 m2=2时运算后竟然m1的值是4.22
但是用其它的数得出来的值都是正确的.太奇怪了.
取m1小数点后的第m2位并在第m2位后一位四舍五入
double ten,m1;
int m2
ten=pow(10,m2);
m1=m_edit1*ten+0.5;
m1=int(m_edit1)/ten;我用其它的数测试都没有问题可是在测试同m1=4.225 m2=2时运算后竟然m1的值是4.22
但是用其它的数得出来的值都是正确的.太奇怪了.
解决方案 »
- 新手求教API 和MFC
- 请教一个与CSerialPort相关的消息响应问题。
- 重装系统后残留下来的MSDN打不开了!郁闷..............
- 普通代码编辑器的数据结构是怎样的
- 关于链表指针取值问题
- 给大家散分了[一来庆祝刘翔110米栏冠军][二来请大家出主意:到底哪个虚拟主机和域名商好]
- 怎么作能使子窗口能移动
- 把一个文件文件导入ACCESS中相应的表,我搜索了很多贴子都没有明确解决.
- 请问在Win32应用程序中,当用户点击鼠标时如何判断键盘上某键是否被按下?谢谢!!!
- 重金求助:AutoCAD图形操控源代码
- 因为这个版快高手多,所以把问题发到这里,是关于杀毒软件升级文件下载的问题,欢迎讨论
- HELP:WinSock如果知道是哪个用户关闭了连接
m1 = int(m1)/ten?
m1=int(m_edit1)/ten;
上面这两句话,你到底想干什么?怪哉!
如果这样的话还能取到小数点后边的尾数么? 狂汗~~~~
============================>
m1 = int(m1/ten);
int m2
ten=pow(10,m2);
m1=m1*ten+0.5;
m1=int(m1)/ten;
int m2
ten=pow(10,m2);
m1=m_edit1*ten+0.5;
m1=int(m1)/ten;
benxudong() 说的倒数第二行写错l ,m1 ---〉m_edit1是我拷错了。
int(m1)的目的是为了取整,我换了floor去掉尾数,可是还是4.225有问题,真的是不应该呀。
============================>
m1 = int(m1/ten);
119365374(砖头
这们的话怎么就取不到小数了.你还没看懂我上面写的意思吧!!!我是想取指定位数的小数.
============================>
m1 = int(m1/ten);------------------
原程序按正常理解应该是正确的,
//此时,m1=423.000000000
m1=int(m_edit1)/ten;//相当于m1=(int)423.00000000/100
// 但执行后,m1=4.22,因为浮点的精度引起
============================>
------------------
这样也不正确,
//此时,m1=423.000000000
m1=int(mt1/ten);//相当于m1=(int)(423.00000000/100.0);
// 执行后,m1=4.000000000
强制转换并不等于是圆整.
math.h里没有提供Round函数,以前我都是取double的字串和它的小数位自已ROUND
再转换回去.
现在都用SDK.API VarR8Round.
原型:
HRESULT VarR8Round( double dblIn, int cDecimals, double * pdblResult);
别的不用我说了吧
分析你的代码:
你可以看单步执行一下,
m_eidt1 = 4.225,其实他显示的不是这个具体的4.225,而是4.2249999999999996,按照你的程序乘100后等于422.499..96, 再加上0.5后是422.9999...96拉,你再取整肯定是422,如果再与ten这个double型的数据相除,又转化成double型,421.9999..99,因此你最后的数据=422是正确的.
改为------>
m1=floorf(m1)/ten;
即可得正确结果4.230000,可能是int取整的问题------------------
没有测试负数的情况,
烦请把您最后写好的函数贴出来