简单问题 12.4 * 10 = ?

KK_LIU 2001-12-18 05:17:59
float f=2.4;
int n=f*10;
//程序计算得n=24,对

f=12.4;
n=f*10;
//程序计算得n=123 ,为什么?怎么办?

f=122.4;
n=f*10;
//程序计算得n=1224 ,又是对的!
...全文
96 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK_LIU 2001-12-19
  • 打赏
  • 举报
回复
谢谢各位的指点,再问下去我就有钻牛角尖的嫌疑了。
虽然仍不得个所以然,但现在已基本能解决问题。
这就行、这就行!
再次谢谢位各,准备给分,虽然分不多,水平有限@^@.
luty 2001-12-19
  • 打赏
  • 举报
回复
先声明我还没有上机试验,只是理论猜测而已.
我想,1个float赋给int时系统肯定要进行舍入处理,但是处理时是否按照什么规则就不一定了.
唯一可以证明的就是我原来也曾尝试过对指针的非法调用的问题,结果就是不确定的.我也不敢
肯定就是这样,还要待回去试一下.
cmouse 2001-12-19
  • 打赏
  • 举报
回复
所以一般浮点到整形的转换一般写成如下:
#define EPS 0.0001 //根据你的浮点精度改变

if(f < 0) {
n = (int)(f * 10 - EPS);
}else{
n = (int)(f * 10 + EPS);
}

这样保证你的结果都是正确的! :)
KK_LIU 2001-12-19
  • 打赏
  • 举报
回复
这是我在w2k、VC6中一简化了的小过程。
如若 欢欢 所言,为什么2.4和122.4又是正确的?相同的环境中精度应该是一样的呀。
谢谢各位的点提。
晨星 2001-12-18
  • 打赏
  • 举报
回复
对,就这么简单,嘿嘿嘿嘿~~~
heimeng 2001-12-18
  • 打赏
  • 举报
回复
.........
heimeng 2001-12-18
  • 打赏
  • 举报
回复
.....
firestarsky 2001-12-18
  • 打赏
  • 举报
回复
说的简单一点
f = 12.4 在机器中的表示可能是 12.399999... 也可能是12.400000...
如果是前一种情况则 f*10 取整后结果就是123
如果是后一种情况则 f*10 取整后结果就是124
就这么简单。
firestarsky 2001-12-18
  • 打赏
  • 举报
回复
精度的问题。
f = 2.4 并不表示 f就等于2.4,其精度和机器有关,如判断f是否等于2.4时不能用如下语句:
if(f == 2.4)
而应用:
if(abs(f - 2.4) < 0.001) //0.001表示充许的误差范围
来表示。
类似的用
n = f * 100 + 0.5 //0.5表示四舍五入
来代替
n = f * 100.
同时由高精度向低精度的类型转换是无法避免有效数据的丢失,就尽量保持数据类型的一致(把n也定义成float)。
qzh1314 2001-12-18
  • 打赏
  • 举报
回复
你用的什么编译器?

把整个程序段写出来啊

xddjd 2001-12-18
  • 打赏
  • 举报
回复
这是一个精度的问题,找一个四舍五入的函数才可以对,对于float到int的转换,msdn如下说得比较明白
When an object of floating type is converted to an integral type, the fractional part is truncated. No rounding takes place in the conversion process. Truncation means that a number like 1.3 is converted to 1, and –1.3 is converted to –1.


--------------------------------------------------------------------------------
KK_LIU 2001-12-18
  • 打赏
  • 举报
回复
不会吧,没人知道?!!
Roage 2001-12-18
  • 打赏
  • 举报
回复
.............

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧