double db = 25.6
int tt = (int)db
最后tt=25
若要四舍五入的虚旁改话认为加0.5就可差判 如启慧:
double db = 25.6
db=db+0.5
int tt = (int)db
最后tt=26
/*如下是我稍微改了的代码主要的错误纯拿唯在double zhegeshu = xx.nextInt()的xx.nextInt()读到的整型数,当你敏漏输入的不是整型数时就会产生异常啦*/
import java.util.Scanner
import static java.lang.Math.*
public class Compare {
public static void main(String[] args) {
System.out.println("这是一个程序,你输入一个小数进行四舍五入 *** 作")
Scanner xx = new Scanner(System.in)
/*xx.nextInt()改为xx.nextDouble()这样对接下来的四啥五入和类型的转换就做培不会产生异常啦*/
double zhegeshu = xx.nextDouble()
//进行类型转换
int v = (int) round(zhegeshu)
System.out.println("四舍五入的结果是" + v)
}
}
分类: 电脑/网络 >>程序设计 >>其他编程语言问题描述:
#include <iostream.h>
main(double x,int d)
{double sum2,sum3,temp
int s1
double s2,n1=1.0
double n2=2.0int sum1
x=111.1
d=1
temp=x
sum1=int (x)
sum2=temp-(double)sum1
sum3=0.0cout<<sum1<<endl
while(sum1){
s1=sum1
sum1=sum1/10
sum1=sum1*10
sum3=sum3+(s1-sum1)*n1
sum1=sum1/10
s1=sum1
n1=n1*2.0
}
cout<<"sum2 1 "<<sum2<<endl
if(d)
while(sum2){
sum2=sum2*10.0cout<<"sum2 "<<sum2<<endl
s2=int(sum2)
cout<<"s2 "<<s2 <<endl为何这里s2的值是0而不是1?
cout<<"n2 "<<n2<<endl
sum3=sum3+s2/n2
sum2=sum2-(double)s2cout<<"sum2 "<<sum2<<endl<<endl
n2=n2*2.0
}
cout<<endl<<sum3<<endl
return 0
}
解析:
111
sum2 1 0.1
sum21
s2 0
看清楚了,是0.99999999999994316
不是1,精度问题,计算机认为0.99999999999994316与1是没有差别的。
所以显示的时候显示了1
之所以会这样是因为计算机对数学计算中长的数是会截断的。
如数学上是
1/3 = 0.333333333333.....
3*0.333333333333...= 0.***********..... = 1
而计算机里面计算是
1/3 =0.333333333333
3*0.333333333333 = 0.*********** != 1 截断了
但显示程序设计上会认为0.***********是等于1的,因为这样友善些。
那怎么才能解决这个问题呢,这个小程序是一个二进制的数转化为十进制的数
while(sum2 >0.***********){ 之前这里写错了,现在应该行了裤坦
sum2 += 0.***********这里加一行就可以解决了。
sum2=sum2*10.0
cout<<亩纯碧"sum2 "<<sum2<<endl
s2=int(sum2)
cout<<迅举"s2 "<<s2 <<endl
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)