double转int精度丢失

nikun_ 2012-02-10 04:33:09
double x;
int y;
x=0.03;
y=(int)(x*100);
y成2了,我想要的是3啊,这是怎么回事,应该怎么搞法?
...全文
650 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
V68V6 2012-02-11
  • 打赏
  • 举报
回复
@#12:
可能你需要看一看计算机组成原理中关于浮点数的存储相关知识,另外最后参与运算在加法器中都是0和1的字符串。这之中就涉及数据截取的问题.十进制在转换为二进制的时候可能会不准确,这就造成精度问题。

浮点数保留5位小数输出时一般采用“舍入法”,而转换成整数时一般采用“舍去法”。这造成一些看起来很荒谬的结果。

nikun_ 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 v68v6 的回复:]

浮点数存储以及精度损失相关讨论
[/Quote]
这个帖子我也看过,我正是同样的疑惑,到底是为什么?
昵称很不好取 2012-02-10
  • 打赏
  • 举报
回复
看下浮点数在计算机中的存储就明白了,浮点数在计算机中存储时有的会有精度的损失的
cotton201012 2012-02-10
  • 打赏
  • 举报
回复
应该是浮点误差吧,电脑不能存储精确的二进制数
x*100 算成2.999........ 是很正常的。然后强制类型转换导致误差。
cnmhx 2012-02-10
  • 打赏
  • 举报
回复
要有floor,cell,int的区别。
有些语言是缺省的。
kerbcurb 2012-02-10
  • 打赏
  • 举报
回复
y=(int)(x*100 + 0.5);
appdev_liu 2012-02-10
  • 打赏
  • 举报
回复
涉及精度丢失问题,不同的编译器出来的值未必一样
我用TC测了一下LZ代码,出的结果就是2.
appdev_liu 2012-02-10
  • 打赏
  • 举报
回复
原因就是你标题上注明的,高精度(double)强制性转换成低精度类型(int),产生精度丢失的现象.
yaoweijq 2012-02-10
  • 打赏
  • 举报
回复
刚在jdk6上试了下,是3
2是什么环境下执行的?
ps:0.03在计算机中是不能精确表示的
可能会引起精度丢失问题
精度要求高的话,不能这么搞的
appdev_liu 2012-02-10
  • 打赏
  • 举报
回复
int 换 double试试
EEXXTTJJSS 2012-02-10
  • 打赏
  • 举报
回复
是3啊。
q345918550q 2012-02-10
  • 打赏
  • 举报
回复
你(int)(x*100);这里强制从double转换成int类型

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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