简单方程中的Java重复小数
我在做一个学校作业,我解一个方程,涉及圆r^2=x^2+y^2的坐标,当r=1时,你通过解y的x值递增。我得到了一个重复的小数,即使我只以十分之一递增。我不知道为什么,我试过几种不同的方法。这是代码简单方程中的Java重复小数,java,Java,我在做一个学校作业,我解一个方程,涉及圆r^2=x^2+y^2的坐标,当r=1时,你通过解y的x值递增。我得到了一个重复的小数,即使我只以十分之一递增。我不知道为什么,我试过几种不同的方法。这是代码 double r = 1; double rSqr; double x = 1; double xSqr; double y; double ySqr; double inc = 0.1; int count = 0; whil
double r = 1;
double rSqr;
double x = 1;
double xSqr;
double y;
double ySqr;
double inc = 0.1;
int count = 0;
while(x > -r)
{
x = r - (count * inc);
rSqr = Math.pow(r, 2);
xSqr = Math.pow(x, 2);
ySqr = rSqr - xSqr;
y = Math.sqrt(ySqr);
count++;
System.out.println(x + " " + y);
}
输出是这样的
1.0 0.0
0.9 0.4358898943540673
0.8 0.5999999999999999
0.7 0.714142842854285
0.6 0.8
0.5 0.8660254037844386
0.3999999999999999 0.9165151389911681
0.29999999999999993 0.9539392014169457
0.19999999999999996 0.9797958971132712
0.09999999999999998 0.99498743710662
0.0 1.0
-0.10000000000000009 0.99498743710662
-0.20000000000000018 0.9797958971132712
-0.30000000000000004 0.9539392014169457
-0.40000000000000013 0.9165151389911679
-0.5 0.8660254037844386
-0.6000000000000001 0.7999999999999999
-0.7000000000000002 0.7141428428542849
-0.8 0.5999999999999999
-0.9000000000000001 0.43588989435406705
-1.0 0.0
它是浮点表示法
使用as数据类型而不是double来解决您的问题。
但要小心,因为BigDecimal是不可变的
问题是double是不精确的。它使用64位来表示十进制数;有些位用于数字部分,有些位用于指数,但许多看似简单的十进制数无法用这种方式精确表示,例如0.1。更多信息,请参阅
解决此问题的一种方法是使用十进制格式显示数字,这种格式可以将数字四舍五入以便于显示。下面是一些示例代码:
public static void main(String[] args) {
DecimalFormat decimalFormat = new DecimalFormat("#0.000");
double d = 1 - .9; // one way to get a repeating decimal floating point number
System.out.println(d);
System.out.println(decimalFormat.format(d));
}
输出:
0.09999999999999998
0.100
期望的输出是什么?问题是什么?谢谢,我还没有读到BigDecimal,所以我会读一读。@Tylerall确切地说-这是一个渲染问题,不是数学问题。在你的职业生涯中,你会遇到很多次这样的情况——总是试着把“做它”代码和“表演它”代码分开,不要因为市场营销中的某些人想让“做它”代码看起来像某种方式而妥协或使其复杂化。哈哈,谢谢。也感谢您解释这是一个渲染问题而不是数学问题。不过严格来说,这是一个数学问题。或者可以,取决于您的要求。由于0.1不是您所认为的那样,我有一个循环无法迭代预期次数。
0.09999999999999998
0.100