开发者社区> 问答> 正文

数据溢出该怎么办?

已解决

数据溢出该怎么办?

展开
收起
游客263d33nbicw7u 2022-03-31 22:05:57 3129 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    使用 long 来解决 int 的数据溢出问题

    发现已经超过数据类型的局限,数据的计算就会出现偏差,所以一定要在操作前预估数据大小。

    但是问题是,既然已经知道 int 会存在溢出问题,就要解决溢出问题。解决方案只有一个:更换更大的数据类型,比 int 更大的数据类型就是 long 类型。

    范例(使用 long 来解决 int 的数据溢出问题):

    在使用此类方式处理之前请注意一个问题,所有程序的执行顺序都是由等号的右边到左边,如果继续使用 int 进行计算结果依然会有溢出,所以最简化的做法是将其中的一个变量首先做类型的扩充,而扩充有两种实现方式:

    (1)实现方式一:直接将 int 变量的内容复制给 long 变量

    public class Test Demo { public static void main (String args [ ]) { int maxValue = Integer.MAX_VALUE ; 取得最大值

    int minValue = Integer.MIN_VALUE ; 取得最小值

    long result = maxValue ; 将 int 的数据变量赋值给 long

    result 是 long 类型 + 1是 int 类型 = long 类型

    (当数据分为小的类型和数据范围大的类型一起进行计算时,数据范围小的要首先变为数据范围大的类型,统一后进行计算)

    System.out.println(result) ; 2147483648

    }

    }

    (2)实现方式二:直接将某一个 int 型变量变为 long 型

    public class Test Demo { public static void main (String args [ ]) { int maxValue = Integer.MAX_VALUE ; 取得最大值

    int minValue = Integer.MIN_VALUE ; 取得最小值

    先将 int 型变为 long 型 + 1是 int 型常量 = long 类型

    long result = (long) maxValue + 1 ;

    System.out.println(result) ; 2147483648

    }

    }

    4、数据类型强制转换

    数据类型除了可以由小变大之外也可以由大变小。但问题是会丢失内容

    范围小的数据类型可以自动变为范围大的数据类型

    数据范围大的数据类型只有强制转换才可以变为数据范围小的数据类型(但是一般不需要应用,99% 情况下提供的数据类型是恰好的)

    范例(数据类型强制转换):

    public class Test Demo { public static void main (String args []) { 任何的整数默认类型都是 int ,但是该数据已经超过了 int 可以保存的数据范围,就需要将此数据明确表示为 long 型常量。

    long num = 2147483648L ; L 或 l都可以

    在强制的时候设置其目标类型,但这种操作有可能会丢失精度

    int result = (int)num ; 大的类型变为小的类型,必须强制

    数据类型除了可以由小变大之外也可以由大变小。但问题是会丢失内容

    范围小的数据类型可以自动变为范围大的数据类型

    数据范围大的数据类型只有强制转换才可以变为数据范围小的数据类型(但是一般不需要应用,99%情况下提供的数据类型是恰好的)

    范例(数据类型强制转换):

    之间讲过所有数据类型都有其默认值,但是这个默认值在方法的说明(主方法)中无效

    范例(观察一个错误程序):

    任何的整数默认类型都是 int ,但是该数据已经超过了 int 可以保存的数据范围,就需要将此数据明确表示为 long 型常量。

    long num = 2147483648L ; L 或 l都可以

    在强制的时候设置其目标类型,但这种操作有可能会丢失精度

    int result = (int)num ; 大的类型变为小的类型,必须强制

    System.out.println(result) ; -2147483648

    }

    }

    此时有两种解决方案,一种是在使用前进行赋值,另外一种是在定义变量时进行赋值

    2022-05-05 13:20:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载