JAVA关于计算的输出问题

如图,一个计算与1~10相乘的代码。结果有两个很长的数据是怎么回事?输入的数明明只有小数点后两位而已。。。packagelv2;importjava.util.Scann... 如图,一个计算与1~10相乘的代码。结果有两个很长的数据是怎么回事?输入的数明明只有小数点后两位而已。。。
package lv2;
import java.util.Scanner;
public class Extra {//简答题3 添加输入功能
public static void main (String [] args){
Scanner input = new Scanner (System.in);
System.out.print("输入一个任意数字:");
double arbitrary = input.nextDouble();
System.out.println("与1~10相乘的结果为:");
int i1 = 1;
while(i1<=10){
System.out.print(i1 + "\t");
i1++;
}
System.out.print("\n");
int i2 = 1;
while(i2<=10){
double j2 = i2 * arbitrary;
System.out.print(j2 + "\t");
i2++;
}
input.close();
}
}
展开
 我来答
AsunaerK
推荐于2018-03-14 · TA获得超过1.1万个赞
知道大有可为答主
回答量:4274
采纳率:84%
帮助的人:615万
展开全部

1、原因在小数的位数问题,因为double输入的数字是3.14,两位小数,3.14*5=18.4,不足两位小数,数据不够,

输出语句上面增加几句代码,


NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumIntegerDigits(2);//设置保留两位小数
j2=Double.parseDouble(nf.format(j2)); //转化后是字符串,再转为double型

这样对数据进行一次操作,当结果是两位或一位小数时就不存在问题了,3位或更多还是会出现问题,数据的位数始终都是需要注意的,这种测试题目可以适当保留多一些,一般不会出错

冠夜柳26
2018-03-14 · TA获得超过178个赞
知道小有建树答主
回答量:185
采纳率:71%
帮助的人:37.7万
展开全部
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。
这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。
在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。
建议用BigDecimal 这个类 ,可以解决这个问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神殿丶无名
2018-03-14 · TA获得超过172个赞
知道答主
回答量:74
采纳率:63%
帮助的人:14.4万
展开全部
java中的double类型并不是精确的精度类型,在进行算术运算的时候,就是出现精度误差。如果真的需要精确数值,请使用BigDecimal类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZZQ1558175113
2018-03-14 · TA获得超过1824个赞
知道小有建树答主
回答量:2225
采纳率:36%
帮助的人:646万
展开全部
i1是int型,而你输入的数字是double型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1111mQK
2018-03-14 · TA获得超过428个赞
知道答主
回答量:34
采纳率:84%
帮助的人:5.3万
展开全部

现在一般都是保留两位 你的这个情况是正常的 可以根据" . "后面#号进行保留小数位数   以确保数据正确性

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式