c# 如何获取小数的整数部分

c# 如何获取小数的整数部分,第1张

用(int)强制把double型转换(该转换不会四舍五入)如

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12566582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存