JAVA程序计算结果出错

packagewodechengxu;publicclassJiage{publicstaticvoidmain(String[]args){Xiguaxigua1;xi... package wodechengxu;
public class Jiage
{
public static void main(String[] args)
{
Xigua xigua1;
xigua1=new Xigua();
xigua1.set单价(1);
xigua1.set半径(0.15);
xigua1.set密度(1.1*10*10*10);
System.out.println("这个半径是"+xigua1.get半径()+"单价是"+xigua1.get单价()+"密度是"+xigua1.get密度()+"的西瓜重量是"+xigua1.get重量()+"价格是"+xigua1.get价格());

}
}

package wodechengxu;
public class Xigua
{
double 半径;
double 密度;
double 重量;
double 价格;
double 单价;
public double get半径()
{
return 半径;
}
public void set半径(double 半径)
{
this.半径 = 半径;
}
public double get密度()
{
return 密度;
}
public void set密度(double 密度)
{
this.密度 = 密度;
}
public double get重量()
{
重量=(4/3)*3.14*半径*半径*半径;
return 重量;
}
public void set重量(double 重量)
{
this.重量 = 重量;
}
public double get价格()
{
价格=(4/3)*3.14*重量*密度*单价;
return 价格;
}
public void set价格(double 价格)
{
this.价格 = 价格;
}
public double get单价()
{
return 单价;
}
public void set单价(double 单价)
{
this.单价 = 单价;
}

}

刚学不久,大神勿喷,谢谢
这个半径是0.15单价是1.0密度是1100.0的西瓜重量是0.010597499999999998价格是36.60376499999999

这是程序出的结果,跟用计算器算出来不一样
展开
 我来答
Dracula丶狂
2014-04-18 · TA获得超过176个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:136万
展开全部
看到中文 有种....真没看过 哈哈
原因是因为java 的double类型数据是不精准的

实际开发会用下面api 提供的类

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是
BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

BigDecimal bigLoanAmount = new BigDecimal("具体数值"); //创建BigDecimal对象
BigDecimal bigInterestRate = new BigDecimal("具体数值");
BigDecimal bigInterest = bigLoanAmount.multiply(bigInterestRate); //BigDecimal运算
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
NumberFormat percent = NumberFormat.getPercentInstance(); //建立百分比格式化用
percent.setMaximumFractionDigits(3); //百分比小数点最多3位
//利用BigDecimal对象作为参数在format()中调用货币和百分比格式化
System.out.println("Loan amount:\t" + currency.format(bigLoanAmount));
System.out.println("Interest rate:\t" + percent.format(bigInterestRate));
System.out.println("Interest:\t" + currency.format(bigInterest));
输出结果
Loan amount: ¥129,876,534,219,876,523.12
Interest rate: 8.765%
Interest: ¥11,384,239,549,149,661.69
追问
感觉新鲜就用中文试了下
生活he家
2014-04-18 · 一个属于大家的搬运工
生活he家
采纳数:1536 获赞数:6828

向TA提问 私信TA
展开全部
太厉害了 第一次见有人用中文命名

4/3是取整的 结果是1
计算器算的 4/3=1.33333333333333

所以有误差
追问
感觉挺新鲜,就是尝试一下
追答
enen 知道问题了吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AAALZSYH
2017-12-28 · TA获得超过123个赞
知道答主
回答量:110
采纳率:93%
帮助的人:20.7万
展开全部
首先:Java是一群外国人发明的语言!所以一般命名都是用英文的!用英文尊重下人家把,但是也可以用中文。估计你以后工作会别出心裁的! 而且有些时候用中文命名会出错!
第二:正题:double类型的数据是有误差的! double类型的数据不能精确的表示数据!举个例子: 比如 int i=0;3/i Java的编译器会出异常! 但是 double i=0; 2/i 就不是异常。原因是double类型的数据不等于0,而是无限接近于0,但它不是0,既然double表示的数据可能有误差,那么算出来的结果就不一定是非常准确的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晋红豆33
2014-04-18 · TA获得超过124个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:80.9万
展开全部
好神奇的代码,原来可以这样子写,
(float)4/3*3.14*重量*密度*单价这样就对了.
追问
呵呵,其实我是感觉中文挺新鲜的,就用中文了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友881abcb
2014-04-18 · TA获得超过186个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:124万
展开全部
因为java里边4/3=1,所以你要换一下 比如 4.0/3
追问
还是不行啊,主要是不是小数级的差别,差别有点大
追答
不是啊,在java里整数相除会自动取整的,改成这样就行了的,亲测
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式