蓝桥杯-小数运算,保留小数点

来源:互联网 发布:阿里妈妈淘宝客认证 编辑:程序博客网 时间:2024/05/01 20:32

java 中默认小数声明是double; 

如:float x = 1.0;报错;需要写:float x = 1.0f;

* float表示单精度浮点数在机内占4个字节,用32位二进制描述
* double表示双精度浮点数在机内占8个字节,用64位二进制描述

* 对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

保留小数点:

方法一:

double d = 3.1415926;
String result = String .format("%.2f",d);
%.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型。


题目一:

历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式:
pai = 4*(1-1/3+1/5-1/7 ....)
这个公式简单而优美,但美中不足,它收敛的太慢了。
如果我们四舍五入保留它的两位小数,那么:
累积1项是:4.00
累积2项是:2.67
累积3项是:3.47
。。。
请你写出它累积100项是多少(四舍五入到小数后两位)。
注意:只填写该小数本身,不要填写任何多余的说明或解释文字。


public class test{public static void main(String[] args){float sum = 0;for (float i = 1; i <= 100; i++) {if (i%2!=0) {sum += 1.0f/(i*2-1);}else {sum -= 1.0f/(i*2-1);}String result = String.format("%.2f", sum*4);System.out.println(result);}}}


-----------------------------------------------------------------------------------------------------------------------------------------------------------------

保留小数点方法二:

  public static String formatDouble4(double d) {        DecimalFormat df = new DecimalFormat("#.00");        return df.rmat(d);//string类型    }public class Main {public static void main(String[] args) {String aString = "2.34";float a = Float.parseFloat(aString);//string 类型和float 转换System.out.println(a);}}
--------------------------------
题目二:

无穷分数

无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。

请填写该浮点数,不能填写任何多余的内容。

/*递归和小数运算*/public class test{public static void main(String[] args){float a= digui(1.0f);String result = String.format("%.5f", a);System.out.println(result);}private static float digui(float f) {// TODO Auto-generated method stubif (f==100.0f) {return f;}return f/(f+digui(f+1));}}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------


有些精度高的必须用double类型;


1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。

它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。

但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

public class test {public static void main(String[] args) {double sum = 0;double i = 1.0d;int count = 0;while (sum<15.0) {sum+=1.0d/i;i++;count++;}System.out.println(count);}}



0 0
原创粉丝点击