获得小数部分的正确方法是像int一样加倍

时间:2015-03-04 07:19:38

标签: c# .net

我需要得到double的小数部分,比如int和只有两个数字。我的代码

(int)Math.Floor(val * 100 - (int)val * 100)

但这可能(int)val * 100可能超出int或long范围。好。 如果我试试

(int)Math.Floor((val - (int)val) * 100)

返回值可能不正确。例如:

double val = 56.9;
int retVal = (int)Math.Floor((val - (int)val) * 100);
// retVal = 89, because (val - (int)val) return 0.899999999675

如何正确获取double的小数部分,如int?

4 个答案:

答案 0 :(得分:2)

尝试使用此扩展方法:

public static int GetFrac2Digits(this double d)
{
    var str = d.ToString("0.00", CultureInfo.InvariantCulture);
    return int.Parse(str.Substring(str.IndexOf('.') + 1));
}

答案 1 :(得分:0)

试试这个

double val = 56.9;
double result=0;
int retVal = (int)Math.Floor((val - (int)val) * 100);
// retVal = 89, because (val - (int)val) return 0.899999999675
int FrctPart=result.ToString().Split('.')[1]

答案 2 :(得分:0)

喜欢这样吗?

decimal d = (decimal)val;
int retVal = Math.Floor((d - Math.Floor(d)) * 100);
// 59.9 --> 90
// 123.456 --> 45

答案 3 :(得分:0)

您也可以使用Math.Truncate代替投射到int

double val = 56.9;
int retVal = (int)Math.Round((val-Math.Truncate(val)) * 100);
// retVal is now 90