Я только что прочитал код .NET Core и попытался понять, как System.Convert.ToInt32 (с плавающей точкой) делает свое дело.
Что меня немного раздражает, так это решение округлить, если число нечетное и> = 0,5.
if (value < 2147483647.5)
{
int result = (int)value;
double dif = value - result;
if (dif > 0.5 || dif == 0.5 && (result & 1) != 0) result++;
return result;
}
В чем причина проверки на странность?Достаточно сложный сценарий, но с разбросом по приложению 1,5 может равняться 2,5.
// True
Convert.ToInt32(1.5) == Convert.ToInt32(2.5)