关于c#加法

sytu_hzj 2010-01-11 12:58:19


float value = 1.9F;
value *= 10;
int temp = (int)(value + 700);




float value = 1.9F;
int temp = (int)(value * 10 + 700);




请高手帮忙,为什么这两段代码运算结果不一样,不论是float型还是double型,第一个temp结果都为719,而第二个为718.
...全文
659 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhukui 2010-01-16
  • 打赏
  • 举报
回复
float转换成int时(利用强制转换)去掉了小数部分
wanghui0380 2010-01-16
  • 打赏
  • 举报
回复
正常,非常正常

我们来看生活当中的事情。

1大1小两个杯子,规则 倒水这个动作,只管倒水,不管是否有剩余和溢出

如果,小杯容量是2升,大杯容量是3升

现在大杯有2.5升水往小杯里倒,倒完的结果是啥?是最后只有2升水了,还有0.5升溢出到杯外了
ximing214 2010-01-16
  • 打赏
  • 举报
回复
学习了
liweining123 2010-01-16
  • 打赏
  • 举报
回复
很明显,你第一个是传入一个float类型的值
第两次你是int型
他们的值肯定有差别的
灵雨飘零 2010-01-16
  • 打赏
  • 举报
回复
up
LLL710451618 2010-01-16
  • 打赏
  • 举报
回复
路过
zhanghuijun123456 2010-01-16
  • 打赏
  • 举报
回复
到最后也没看明白谁说得对
jianghaigang806 2010-01-16
  • 打赏
  • 举报
回复
float value = 1.9F;
value *= 10;
int temp = (int)(value + 700);
化成你写的方法2相当于:
float value = 1.9F;
int temp = (int)((Float)(value * 10) + 700);
现在对比:
float value = 1.9F;
int temp = (int)(value * 10 + 700);



Pro_ah 2010-01-16
  • 打赏
  • 举报
回复
路过
ksws0266483 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tzs2304 的回复:]
引用 6 楼 antony1029 的回复:
*= 这个没用类型的转换。
float value = 1.9F;
(int)(value2 * 10 ) 而这个得到的值为18.它丢失了精确度。

up
[/Quote]

up
zhu_chuan_hang 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 antony1029 的回复:]
*= 这个没用类型的转换。
float value = 1.9F;
(int)(value2 * 10 ) 而这个得到的值为18.它丢失了精确度。
[/Quote]

LOOK THIS
qingyun27sc 2010-01-15
  • 打赏
  • 举报
回复
张见识了 O(∩_∩)O~
rightyeah 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 hzpdh 的回复:]
说点本质的好么,听到最多的就是“丢失精度”,怎么丢失的?解释一下 谢谢 11楼说的有点站边,18.999999761581421是怎么来的? 学习
[/Quote]不就是丢失精度嘛,还要怎么解释,计算机原理是怎么学的?
http://msdn.microsoft.com/zh-cn/vstudio/c151dt3s.aspx
http://hxraid.javaeye.com/blog/504293
sssddfff 2010-01-15
  • 打赏
  • 举报
回复
关注,学习
hzpdh 2010-01-15
  • 打赏
  • 举报
回复
说点本质的好么,听到最多的就是“丢失精度”,怎么丢失的?解释一下 谢谢 11楼说的有点站边,18.999999761581421是怎么来的? 学习
csdnfan 2010-01-15
  • 打赏
  • 举报
回复
float value = 1.9F;
value *= 10;
int temp = (int)(value + 700);
========
value = 1.9*10=19;
temp=19+700=719

float value = 1.9F;
int temp = (int)(value * 10 + 700);
=====
value * 10 =(int)value * 10 =20
+700 = 720
xray2005 2010-01-15
  • 打赏
  • 举报
回复
JF
meng22623 2010-01-15
  • 打赏
  • 举报
回复
一些数据类型 可以导致结果不一样!要注意数据类型!
tank103016 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cjnkd 的回复:]
Math.Round(value1 * 10 + 700,10)=718.9999997616
此值强转时丢失精度,结果为718
[/Quote]
up
MsdnProgrammer 2010-01-15
  • 打赏
  • 举报
回复
float转换int类型时的问题
加载更多回复(32)

111,121

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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