Java 编程.int 乘以一个数字。得到的数字是long形。

privatestaticinttt1=12400000;System.out.println(tt1*10000);这样的结果就不正确的。我想问下。和这样问题差不多的问... private static int tt1 = 12400000 ;
System.out.println( tt1 * 10000 );
这样的结果就不正确的。我想问下。和这样问题差不多的问题。如何解决呢?
展开
 我来答
托雷斯F
推荐于2018-04-12 · TA获得超过190个赞
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:83.9万
展开全部
这个叫临界问题。
JAVA的基本类型不具备精确计算。

Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。
构造函数:

  BigDecimal(int)创建一个具有参数所指定整数值的对象。
  BigDecimal(double)创建一个具有参数所指定双精度值的对象。
  BigDecimal(long)创建一个具有参数所指定长整数值的对象。
。。。
详见API
追问
谢谢你的提议。我会去研究下的。
不过我已经想出来方法了。和你共享下。
long tt1 = 12400000L ;
long tt2 = tt1 * 10000 ;
System.out.println( tt2 );
追答
您好!
你的方法看起是可行。
但是不能用于科学计算。
原因还是那句:JAVA的基本类型不具备精确计算。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自浮山舞尽霓裳的铁树
2014-02-27 · TA获得超过212个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:123万
展开全部
java里面int类型是4个字节,32位,也就是最大2^31-1 = 2147483647
超过这个范围就溢出了。

可以用强制转换 (long)tt1 * 10000

这样结果就是对的

但是long的最大范围也是2^63-1 再超过的话就要用大数类型了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣鸾OJ
2015-10-06 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:114万
展开全部
这个叫临界问题。
JAVA的基本类型不具备精确计算。

Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。
构造函数:

  BigDecimal(int)创建一个具有参数所指定整数值的对象。
  BigDecimal(double)创建一个具有参数所指定双精度值的对象。
  BigDecimal(long)创建一个具有参数所指定长整数值的对象。
。。。
详见API
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式