您的位置:首页 > 其它

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

2017-04-01 16:15 162 查看
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 stub
if (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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: