Java 编程.int 乘以一个数字。得到的数字是long形。
privatestaticinttt1=12400000;System.out.println(tt1*10000);这样的结果就不正确的。我想问下。和这样问题差不多的问...
private static int tt1 = 12400000 ;
System.out.println( tt1 * 10000 );
这样的结果就不正确的。我想问下。和这样问题差不多的问题。如何解决呢? 展开
System.out.println( tt1 * 10000 );
这样的结果就不正确的。我想问下。和这样问题差不多的问题。如何解决呢? 展开
3个回答
展开全部
这个叫临界问题。
JAVA的基本类型不具备精确计算。
Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。
构造函数:
BigDecimal(int)创建一个具有参数所指定整数值的对象。
BigDecimal(double)创建一个具有参数所指定双精度值的对象。
BigDecimal(long)创建一个具有参数所指定长整数值的对象。
。。。
详见API
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的基本类型不具备精确计算。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java里面int类型是4个字节,32位,也就是最大2^31-1 = 2147483647
超过这个范围就溢出了。
可以用强制转换 (long)tt1 * 10000
这样结果就是对的
但是long的最大范围也是2^63-1 再超过的话就要用大数类型了
超过这个范围就溢出了。
可以用强制转换 (long)tt1 * 10000
这样结果就是对的
但是long的最大范围也是2^63-1 再超过的话就要用大数类型了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个叫临界问题。
JAVA的基本类型不具备精确计算。
Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。
构造函数:
BigDecimal(int)创建一个具有参数所指定整数值的对象。
BigDecimal(double)创建一个具有参数所指定双精度值的对象。
BigDecimal(long)创建一个具有参数所指定长整数值的对象。
。。。
详见API
JAVA的基本类型不具备精确计算。
Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。
构造函数:
BigDecimal(int)创建一个具有参数所指定整数值的对象。
BigDecimal(double)创建一个具有参数所指定双精度值的对象。
BigDecimal(long)创建一个具有参数所指定长整数值的对象。
。。。
详见API
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询