C# 求整数等分双精度的正确方法
我需要得到double的分数部分,比如int和两个数字。我的代码C# 求整数等分双精度的正确方法,c#,.net,C#,.net,我需要得到double的分数部分,比如int和两个数字。我的代码 (int)Math.Floor(val * 100 - (int)val * 100) 但此can(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); //
(int)Math.Floor(val * 100 - (int)val * 100)
但此can(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 like int的小数部分?试试这个
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]
也许像这样
decimal d = (decimal)val;
int retVal = Math.Floor((d - Math.Floor(d)) * 100);
// 59.9 --> 90
// 123.456 --> 45
尝试以下方法:
public static int GetFrac2Digits(this double d)
{
var str = d.ToString("0.00", CultureInfo.InvariantCulture);
return int.Parse(str.Substring(str.IndexOf('.') + 1));
}
您还可以使用而不是强制转换到int
:
double val = 56.9;
int retVal = (int)Math.Round((val-Math.Truncate(val)) * 100);
// retVal is now 90
表示您希望
899999975
作为整数??可能的重复项以避免舍入错误。如果可能,您应该使用decimal
。@Аааа检查我的答案。我希望它能有所帮助。可能重复的Math.Round()
函数可能会改变数字。我认为这不是更好的解决办法。