我需要得到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?
答案 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