Мне нужно преобразовать двойное значение x в два целых числа, как указано в следующем ...
"Поле x состоит из двух 32-разрядных целых чисел со знаком: x_i, представляющий неотъемлемую часть, и x_f, представляющийдробная часть, умноженная на 10 ^ 8. Например: x из 80,99 будет иметь x_i как 80 и x_f как 99 000 000 "
Сначала я попробовал следующее, но иногда это не удается, давая значение xF 1999999, когда онодолжно быть 2000000
// Doesn't work, sometimes we get 1999999 in the xF
int xI = (int)x;
int xF = (int)(((x - (double)xI) * 100000000));
Кажется, что следующее работает во всех случаях, которые я проверял.Но мне было интересно, есть ли лучший способ сделать это без раунда.А также, могут ли быть случаи, когда это все еще может потерпеть неудачу?
// Works, we get 2000000 but there's the round call
int xI = (int)x;
double temp = Math.Round(x - (double)xI, 6);
int xF = (int)(temp * 100000000);