两个Long类型相乘溢出怎么解决

public static void main(String[] args) throws Exception {
        long a = Long.MAX_VALUE;
        long b = Long.MAX_VALUE;

        BigDecimal ba = new BigDecimal(String.valueOf(a));
        BigDecimal bb = new BigDecimal(String.valueOf(b));
        BigDecimal bc = ba.multiply(bb);
        System.out.println(String.valueOf(a));
        System.out.println(String.valueOf(b));
        System.out.println(bc);
    }

9223372036854775807
9223372036854775807
85070591730234615847396907784232501249

两个Long类型相乘溢出怎么解决

时间: 2024-10-07 14:30:05

两个Long类型相乘溢出怎么解决的相关文章

内存溢出的解决思路

    内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存. 引起内存溢出的原因有很多种,常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存在死循环或循环产生过多重复的对象实体: 4.使用的第三方软件中的BUG: 5.启动参数内存值设定的过小: 内存溢出的解决方案:第一步,修改JVM启动参数,直接增加内存.(-Xms,-Xmx

java.sql.SQLException: 数字溢出 的解决办法

java.sql.SQLException: 数字溢出 的解决办法 今天碰到了 Java.sql.SQLException: 数字溢出.............的错误. 原因可能有以下两种,一:使用的jdbc驱动与数据库版本不匹配引起的,把版本改为一致的,测试看看: 二:可能是数据库的某个NUMBER类型的字段超出对应实体类属性的接收范围(如数据库字段是11位的手机号,而对应实体类使用Integer接收Phone这个属性,必然溢出), 解决方法:将实体类该属性的数据类改为Long即可.

求两个大整数相乘的积,数字长度在127个字符之内。

计算两个大整数相乘的结果,数字不是double类型能表示的,数字长度没有限制(最大127位). 方法一:使用java中的大整数处理库函数,java.math.BigInteger,java.math.BigDecimal; 方法二:不利用库函数,自己实现其功能,可以练习自己对待复杂问题的处理能力,提高编程水平. 此代码中利于两者的结合,利于库函数可以看自己编写的代码的正确性. 1.主函数 import java.math.BigDecimal; import java.util.Scanner;

两种常量类型-readonly和const

C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此也有人称其为只读变量. const为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值. 下面声明两个常量: public static readonly int A = 2; //A为运行时常量public const int B = 3; //B

oracle10g获取Date类型字段无时分秒解决办法!

一般的数据库中,DATE字段仅仅表示日期,不包括日期信息,而Oracle数据库中的DATE数据类型是包括日期.时间的,对于不同的Oracle jdbc驱动版本,对于该问题的处理都有些区别. 最近使用 ORACLE 10G,时间字段因需求,设为了DATE类型,发现hibernate用native SQL 查询或ibatis获取result.getObject()的时候显示不了时分秒,原来是JDBC驱动自动把date映射为 java.sql.date,故截断了时分秒信息,如果你使用9i或者11g 的

C++中char类型的溢出问题

C++中什么经常会运用到char类型,也会将char类型作为循环语句的循环条件,但往往这里最容易出现错误,容易出现溢出,进入死循环.这里我们就来简单介绍下为什么会出现这种情况. 首先,了解下char类型的取值范围: char分为无符号(unsigned)和有符号(signed)两种: 无符号(unsigned)的取值范围:0~255: 有符号(signed)的取值范围为:-128~127. 一般我们常用char来声明一个变量,编译器默认为有符号的,即范围为:-128~127. 常见溢出问题: 知

socket编程之二:两种链接类型upd和upd

前面一篇文章说到了一些计算机网络的基础知识,引入了socket,从这节开始,就进入正题了. 一 概率 TCP:Transimission Control Protocol传输控制协议. UPD:User Datagram Protocol用户数据包协议. 两者都属于上一篇文章说的OSI模型中的第四层--传输层的协议. 两者相比: TCP协议面向连接,UDP协议面向非连接:(链接) TCP协议传输速度慢,UDP协议传输速度快:(速度) TCP有丢包重传机制,UDP没有:(重传) TCP协议保证数据

两个 Long 类型为什么不能直接用==比较

这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存中的地址值(栈中的内容). 2.equals 是 java.lang.Object 类的一个方法.equals 比较的是两个对象的内容(堆中的内容).java 中所有的类都默认继承于 Object,所以所有的类都有这个方法. 但是 Long 是一个对象,是对 long 的封装.我们看一下 Long 对象的源码,里面的 equals 方法是这么写的: 1 public boolean equals(Object obj) {

【C语言】编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。

/*编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4 */ #include <stdio.h> int yue(int a,int b) { int temp; int n; if (a>b) { temp=a; a=b; b=temp; } n=a; if(a==0) return b; else while(n!=0) { if( a%n==0 &&