BillWoodruff
См. это для понимания ограничений использования десятичных или плавающих типов для выражения числовых значений: [^].
private const int SIGN_MASK = ~Int32.MinValue;
public int GetDecimalRemainder(float fvalue)
{
double dplaces;
try
{
decimal dvalue = Convert.ToDecimal(fvalue);
dplaces = (double) ((Decimal.GetBits(dvalue)[3] & SIGN_MASK) >> 16);
return (int) ((dvalue - Math.Truncate(dvalue)) * (int) Math.Pow(10d, dplaces));
}
catch (Exception ex)
{
throw new TypeInitializationException(@"{fvalue} cannot be converted", ex);
}
}
Записи:
0 обратите внимание, что преобразование в десятичную дробь может округлить значение, что приведет к потере точности og в мантиссе.
1 это будет возвращать отрицательное число, если входной поплавковый негативные
2 Использование ' GetBits для нахождения числа степеней десяти в поплавковой мантиссе iis на основе: [
^]