C#真BT! 针对符点数和int采用不同的类型转换原则???

问题描述

floata=2.5123f;floatb=3.14159f;doubleresult=a*b;Console.WriteLine(result);上面这段代码会将a和b的值相乘的结果转换为double。而下面这段则不同。inta=2147483647;intb=200;longresult=a+b;Console.WriteLine(result);上面这段代码输出的结果是-2147483449。它没有将结果自动转换为long为什么是这样子呢?为什么?为什么呀....真BT

解决方案

解决方案二:
有这样的事??
解决方案三:
我试了试真的是这样关注!
解决方案四:
int最大就是2147483647你再加200当然会这样了
解决方案五:
int的取值范围是-2147483648~2147483648也就是从-2的11次方到+2的11次方因为你的算式是先计算,再赋值的,也就是在赋值前,结果已经越界了,将越界的结果传过去当然不对了.
解决方案六:
inta=2147483647;intb=200;longresult=a+b;等于inta=-2147483648;intb=199;longresult=a+b;
解决方案七:
可是浮点不同,他记录的是点的位数,也就是说在做越界计算的时候,位数也记录了下来,传值的时候一般不会有太大的错位但是不敢保证结果的正确,你可以用双浮点验算一下.
解决方案八:
lz太强了,这都发现了,更好的测试是:floata=float.MaxValue;floatb=float.MaxValue;doubleresult=a*b;结果是:result==(double)a*(double)b
解决方案九:
真BC啊,真BC
解决方案十:
//LZ的式子可以换个方式写inta=2147483647;intb=200;intc=a+b;//此时C已经是-2147483449longresult=c;//结果当然是-2147483449
解决方案十一:
@icdbow,请做下面的测试:floata=float.MaxValue;floatb=float.MaxValue;floatc=a*b;doubleresult=a*b;

结果是c!=result
解决方案十二:
vb.net测试结果相同,IL级别的代码似乎也是正确的,是否应该改口说是clr真BT。。。
解决方案十三:
TO:VWXYZH很长时间没有做这些数的运算了,以前好象有这样的事情,float的和float乘返回的是双浮点.印象不深,您可以用传参的形式测试下.
解决方案十四:
把乘法改成加法,结果也一样c都是Infinity而result都是正确的值
解决方案十五:
数据类型精度问题吧
解决方案:
浮点默认double,整形默认int,我认为很合理~
解决方案:
呵呵,float是先转double再做运算。int是先做运算再转成long的。有意思,不知道是什么道理。
解决方案:
inta=2147483647;intb=200;longresult=(long)a+b;

呵呵,无论设计合不合理,测试的结果就是如此设计不合理又咋了?难道能买下.NET重新开发一次不成?所以改变不了.NET的内核,只能改变自己的代码
解决方案:
本来就是如此,楼主没有认真看帮助罢了。浮点数会转换成double来进行运算,如果int也这样,估计楼主早就发疯了,这会造成我们熟知的1+3这样的式子的结果是long,换言之inti=1+3;会报编译错误,所以显然不可能这样进行运算。但浮点数为什么又要转为double来运算呢?个人认为有两个原因:一是微软在设计C#的时候,有意加入了一些傻瓜元素,放低C#的门槛,例如decimal类型。转换为double计算,可以提高运算精度,避免某些傻瓜程序员问东问西。二是微软在设计IL的时候,明显偏重于整形运算,在IL中整形运算的指令比浮点类型运算的指令多出N倍,更多的运算指令能让CLR更好的根据实际情况选择更好的优化JIT编译结果,不过这也与CPU指令集偏重整形运算一致。这就导致IL中根本没有两个float类型运算的指令,但有两个int类型运算的指令。为了与IL一致,C#便如此设计了。
解决方案:
楼上的回复太强了...
解决方案:
楼上的回复太弱了...
解决方案:
顶一下!!!!!!!!
解决方案:
inta=2147483647;intb=200;longresult=(long)a+(long)b;Console.WriteLine(result);楼主运行一下看看,你就知道为什么了~~~
解决方案:
lz是新手吧那你试试其它语言吧
解决方案:
貌似在某些CPU上。。。。int和long的取值范围是相同的=。=!!传闻而已。。。
解决方案:
ggs,ddu.
解决方案:
哎!!!!!!!!!1
解决方案:
很明显是溢出了吗
解决方案:
在CPU上int和long的取值范围是不相同的;但是double和float却是相同的,都是double的取值范围
解决方案:
个人认为是MS考虑比较周到点,怕我们在进行float运算时溢出

时间: 2024-09-20 12:00:25

C#真BT! 针对符点数和int采用不同的类型转换原则???的相关文章

php下intval()和(int)转换使用与区别_php技巧

复制代码 代码如下: <?php echo "<br/>数值强制转换:"; $string="2a"; $string1=intval($string); echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,将原样输出 $string2=(int)($string); echo $string2 ?>   手册上查不到. 这也是手册上说的:引用: int intval ( mixed $

Java基础-10总结形式参数,包,修饰符,内部类

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 类,抽象类,接口的综合小练习 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析,这个案例中有哪些

使用Java代码将IP地址转换为int类型的方法_java

基本知识点   IP --> 整数: 把IP地址转化为字节数组 通过左移位(<<).与(&).或(|)这些操作转为int 整数 --> IP: 将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP. 将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP. 将整数值进行右移位操作(>>>),右移8位,再进行与操作

Convert、Parse、TryParse、(int) 的区别

1. (int)变量名[强制类型转换]:       该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误.       该方式对于浮点数会做无条件舍去,失去精确度       当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错.    

U盘插在电脑无法显示盘符的原因和解决办法

  最方便的携带数据的产品就是U盘,它可以在任何电脑上进行转化数据,但也会有人遇见U盘插在电脑无法显示盘符的尴尬时刻.这样的事情发生,谁都不想的,我们不妨吃完面,再看看小编怎么说. 具体方法: 首先,我们判断可能造成的原因,有可能是虚拟光驱.网络驱动器等软件. 1.虚拟光驱 我们按照路径 C:WINDOWSsystem32drivers文件夹,查找"sptd.sys"的文件,并且删除它,再重启电脑. 小编提醒: 本文中提到的"sptd.sys"一定不是微软Windo

三星GALAXY S5 Prime真机曝光 2K屏铝制机身

中介交易 SEO诊断 淘宝客 云主机 技术大厅 [摘要]该机将采用铝制机身,并且屏占比更大,预计将在六月中旬正式发布. 腾讯数码讯(水蓝)高配版三星GALAXY S5 Prime虽然传闻许久,但一直未有真机被曝光.不过,随着发布日的临近,这款功能更强大的旗舰级新机终于在网络上露出了庐山真面目.根据国外网站Phonearena放出的一组据称是三星GALAXY S5 Prime真机照片显示,该机将采用铝制机身,并且屏占比更大,预计将在六月中旬正式发布. 外观四大变化 从此次曝光的真机照片来看,高配版

asp.net C# int类型转换

asp教程.net c# int类型转换 int i = -1; bool b = int.tryparse(null, out i); 执行完毕后,b等于false,i等于0,而不是等于-1,切记. int i = -1; bool b = int.tryparse("123", out i);  执行完毕后,b等于true,i等于123: 1.(int)是一种类型转换:当我们类型到long,float,double,decimal类型,可以使用隐式转换,但是当我们从long类型到i

BOT、BT、PPP形式介绍(2)

BT1.什么是BT     BT投资是BOT的一种变换形式,即Build-Transfer(建设-转让),政府通过特许协议,引入国外资金或民间资金进行专属于政府的基础设施建设,基础设施建设完工后,该项目设施的有关权利按协议由政府赎回.通俗地说,BT投资也是一种"交钥匙工程",社会投资人投资.建设,建设完成以后"交钥匙",政府再回购,回购时考虑投资人的合理收益.标准意义的BOT项目较多,但类似BOT项目的BT却并不多见.2.BT投资模式的缺陷     BT项目建设费用

I/O的知识储备

背景 前一段时间一直在关注一些nio的相关技术,也和公司的架构师交流了一下,学到了一些相关原理,比如nio的优势和劣势.以及一些排查nio bug问题的方式,受益量多.为自己做一下技术储备,以后可以多玩玩nio的相关技术 知识点 unix网络编程第6章: 几种unix下的I/O模型.   阻塞I/O模型    (java io) 非阻塞I/O模型 I/O复用          (java 5的nio) 信号驱动I/O 异步I/O          (java7的aio) 几点说明:  1.  阻