java:双精度数字

java:双精度数字,java,double,precision,Java,Double,Precision,一直在使用这段代码,从如何在Java9thEdition(Deitel)中编程,练习5.20 从无穷级数中计算π的值。 π = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 + … 打印一张表格,显示通过计算本系列的前200000项近似得出的π值。在首次获得以3.14159开头的值之前,必须使用多少术语 问题是,我得到的值是3.14159,这个近似值是0.000005,我认为这不是很好。。。例如,它可能会说130657是第一个,但它以3.141585开头。。。尝试使用0.00

一直在使用这段代码,从如何在Java9thEdition(Deitel)中编程,练习5.20

从无穷级数中计算π的值。 π = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 + … 打印一张表格,显示通过计算本系列的前200000项近似得出的π值。在首次获得以3.14159开头的值之前,必须使用多少术语

问题是,我得到的值是3.14159,这个近似值是0.000005,我认为这不是很好。。。例如,它可能会说130657是第一个,但它以3.141585开头。。。尝试使用0.000001作为精度不会让我知道数字以3.14159开头,即使我在输出中看到几个以3.14159开头的数字

所以,这本书还没有真正解释字符串,除了String.format可能。。。像@compass这样的解决方案很好,但我宁愿用数学来解决这个问题,我用Math.abs()因为我认为它会有帮助,用

if ( 3.14159 <= pi && pi < 3.14159 )
if(3.14159注意
Math.abs(-0.1)=0.1
-绝对值丢弃负号。这意味着
Math.abs(3.141585-3.14159)==Math.abs(-0.000005)==0.000005
,满足条件

要检查数字是否以3.14159开头,只需将其与间隔进行比较:

if (3.14159 <= pi && pi < 3.14160)
但这是错误的,因为3.14160也满足这个条件(尽管幸运的是,这个精确值不会出现在π计算中)

“在第一次得到以3.14159开头的值之前,需要使用多少术语?”

这些说明不够清楚。您必须指定使用哪种舍入算法将值表示为字符串。例如,如果使用@Compass指定的方法,答案是136120


但是如果您使用
String.format(“%.5f”,pi)
,那么答案是130657,其中第一个方法生成pi=3.141585000020884。

这非常有效,请记住作者还没有教过如何比较字符串或类似的东西,代码现在运行正常

import javax.swing.JOptionPane;

public class Pi {
    public static void main (String args[]){
        double pi = 4;
        double fraccion = 3.0;
        double cociente ;
        int firstSixDigits;
        for ( int i = 1 ; i <= 200000 ; i++ ){          

            cociente = 4.0/fraccion;

            if ( i % 2 == 0 )
                pi += cociente;
            else
                pi -= cociente;

            System.out.printf("El valor de pi en el término %d, es : %.10f \n", i , pi);

            firstSixDigits = (int) ( pi * 100000.0 ) ;



            if ( firstSixDigits % 314159 == 0  )
                    JOptionPane.showMessageDialog(null, String.format("Pi vale: %.10f este es el primer valor que empieza con 3.14159 en el término %d", pi, i));

            fraccion += 2.0;

        }

        System.exit(0);
    }
}
import javax.swing.JOptionPane;
公共类Pi{
公共静态void main(字符串参数[]){
双pi=4;
双分形=3.0;
双共客户;
整数前六位数;

对于(int i=1;i基于问题提示),我简单地假设它正在寻找<代码>双.toSoint(PI)。StastSube(“3.14159”)<代码> @罗盘@ ROIX取决于我们是否考虑<代码> 3.14159E+20 < /代码>从“3.14159”开始(尽管它在这个问题上无关)。…我不这么认为…也许作者想让学生们把前6位数字分别与3.14159进行比较…无论如何,谢谢
if (Math.abs(pi - 3.141595) <= 0.000005)
//                       ^
import javax.swing.JOptionPane;

public class Pi {
    public static void main (String args[]){
        double pi = 4;
        double fraccion = 3.0;
        double cociente ;
        int firstSixDigits;
        for ( int i = 1 ; i <= 200000 ; i++ ){          

            cociente = 4.0/fraccion;

            if ( i % 2 == 0 )
                pi += cociente;
            else
                pi -= cociente;

            System.out.printf("El valor de pi en el término %d, es : %.10f \n", i , pi);

            firstSixDigits = (int) ( pi * 100000.0 ) ;



            if ( firstSixDigits % 314159 == 0  )
                    JOptionPane.showMessageDialog(null, String.format("Pi vale: %.10f este es el primer valor que empieza con 3.14159 en el término %d", pi, i));

            fraccion += 2.0;

        }

        System.exit(0);
    }
}