回 帖 发 新 帖 刷新版面

主题:请问如何取一个数的小数部分?

想写一个四舍五入的方法,判断小数部分如果是0.1-0.4,则只取整数部分,如果是0.5-0.9则整数部分加1,全部用判断写下来效率太低,请问有没有好的办法?谢谢

回复列表 (共9个回复)

沙发

整数部分:(int)(a+0.5)

板凳

四舍做到了,五入怎么办?0.1-0.9之间差异还是很大的!

3 楼

五入也做到了啊:
a=0.6时,(int)(a+0.5)=1,整数部分不就进一了

4 楼

还是不妥:
//(int)(a+0.5)+1 先把A取整,然后再加上0.5,再加上1;
但我需要的是:
 if (a>=3.1 && a<=3.4)
    a = 3;
 else if ((a>=3.5 && a<=3.9)||(a>=4.1 && a<=4.4))
    a = 4;
 .
 .
 .
 else if ((a>=22.5 && a<=22.9)||(a>=23.1 && a<=23.4))
    a = 23;
 else if (a>=23.5 && a<=23.9)
    a = 24;

我想先把小数取出来,做一个循环来判断.你再看看有没有其他的办法?

5 楼

OH,用取整应该可以:
double b,tmp;

tmp = a;
b = tmp - (int)a;

if (b>=0.1 && b<=0.4)
{
    return (int)a;
}
else if (b >=0.5 && b<=0.9)
{
    return (int)(a+1);
}

         




6 楼

是不是有现成的确函数啊?round试试看.

7 楼

个人觉得我的自己方法更加简单
public static double Round(double value,int digite) 

string strValue = value.ToString(); 
int index = (strValue.ToString()).IndexOf("."); 
if (strValue.IndexOf(".") > 0) 

strValue += "1"; 

return Math.Round(double.Parse(strValue),digite); 

8 楼

个人觉得我的自己方法更加简单
public static double Round(double value,int digite) 

string strValue = value.ToString(); 
int index = (strValue.ToString()).IndexOf("."); 
if (strValue.IndexOf(".") > 0) 

strValue += "1"; 

return Math.Round(double.Parse(strValue),digite); 

9 楼

取整的方法真的不错!但有时会有这样的问题 A = 77.23 B = 22.77如果把整数部分全部取掉,显示出来就是 77% 和 22%,不符合要求啊,要能四舍五入,但DOUBLE 类型的数得出的小数部分太长,我重新写了四舍五入的方法,但效果也不好.....!

我来回复

您尚未登录,请登录后再回复。点此登录或注册