求助:为什么double型超出MAX_VALUE了却不会溢出? - 爱问答

(爱问答)

求助:为什么double型超出MAX_VALUE了却不会溢出?

如果用Integer.MAX_VALUE加上100,会出现溢出,得到的结果是负数;

如果用Long.MAX_VALUE加上100,也会出现溢出,得到的结果是负数;

但是,如果用Double.MAX_VALUE加上100.0, 并不会溢出,得到的结果仍是Double.MAX_VALUE的数值。

百思不得其解,请问这是什么原因呢?

程序如下:

public class TestOverflow {

 public static void main(String[] args) {

int a=Integer.MAX_VALUE;

long b=Long.MAX_VALUE;

double c=Double.MAX_VALUE;

double d=Double.MAX_VALUE-10.0;

System.out.println(a+" "+(a+100)); 

System.out.println(b+" "+(b+100)); 

System.out.println(c+" "+(c+100.0)); 

System.out.println(d+" "+(c+d)); }}


运行结果如下:

求助:为什么double型 超出MAX_VALUE了却不会溢出?


溢出(错误 6):

当赋值超出目标的限制时,就会发生溢出。此错误有以下的原因和解决方法:


*赋值、计算或数据类型的结果的转换太大,以致于不能在变量类型所允许的范围内表示出来。

赋值给足够表示值的范围的类型的变量上。


*给属性的赋值超过属性能接受的最大值。

确保赋值适合属性的范围。


*试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:

12      Dim x As Long    x = 2000 * 365   ' 错误: 溢出  

要解决这个问题,请按如下方式键入该数字:

12       Dim x As Long    x = CLng(2000) * 365  


详细信息,可选取有问题的项目,并按下 F1 键查看帮助。


你的这个很正常,double的有效位是16位,你的100根本没达到它的精度.所以对结果没有影响


可以好好复习下c语言的数据类型知识,基础很重要单精度型:float,数据以32位二进制形式存入内存单元双精度型:double,数据以64位二进制形式存入内存单元当一个变量的值超过了变量所能表示的范围时,将产生溢出。一个变量只能赋给与之类型相匹配的变量

下一篇:c语言中把章节知识点放入文件夹中,怎么能删除文件中的某一个知识点,还有能按章节统计知识点个数?

上一篇:求知:筛选同年同月的多条件数据求和

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?