当前位置: 首页 > 面试题库 >

Java在简单方程式中重复小数

訾高明
2023-03-14
问题内容

我正在做一个学校作业,其中我解决了一个涉及圆的坐标的方程(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;
    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

问题答案:

问题是那double是不精确的。它使用64位代表十进制数;有些位用于数字部分,有些位用于指数,例如,许多看似简单的十进制数字不能用这种方式准确表示0.1。有关更多信息,请参见此Wiki文章。

解决该问题的一种方法是使用显示数字DecimalFormat,该数字可以四舍五入以用于演示目的。这是一些示例代码:

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


 类似资料:
  • 问题内容: 我在寻找一个简单的方法,公共或操作员,让我再重复一些字符串ñ倍。我知道我可以使用for循环编写此代码,但是我希望在必要时避免for循环,并且应该在某个地方存在一个简单的直接方法。 相关: 重复字符串javascript 通过重复给定次数另一个字符串来创建NSString 已编辑 当它们不是完全必要时,我尝试避免for循环,因为: 即使将它们隐藏在另一个函数中,它们也会增加代码行数。 读

  • 有没有人可以帮助我如何做到这一点,因为很难知道如何在我的简单程序中实现宋。我只是初学者程序员,我想知道如何做到这一点,因为我有一个关于这方面的项目。请用最简单的方式帮助我,因为我还不太擅长java编程,谢谢^_^ //这是我的代码。你不认为这是可能的吗?

  • 上面的代码是创建魔方的代码。我如何以更简单的形式编写下面的代码,让java初学者能够理解?

  • 我有大约20种不同的声音,我希望每1秒播放一次。每个声音只有0.7秒的持续时间。我甚至不知道如何将mp3导入java。我如何用java实现这一点? 更新 我有了新问题一旦开始我就停不下来了

  • 我在模拟游戏中使用这个拖动公式: (参见维基百科上的拖动) 这个方程式会持续一段时间,直到阻力大于速度,物体(火箭)开始下降,而不是缓慢上升。目前,我正在使用trig从和中减去阻力,以计算每种阻力的变化。 这是一个更简单的公式,还是我可以通过将每秒帧数设为60来实现这一点的方法?

  • 本文向大家介绍MySQL中删除重复数据的简单方法,包括了MySQL中删除重复数据的简单方法的使用技巧和注意事项,需要的朋友参考一下 MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式,用这个方式,五百万数据,十来分钟就全部去除重复了,请各位参考。 第一