FORTRAN предоставляет несколько функций для преобразования числа с двойной точностью в целое значение. Метод, используемый для усечения / округления, отличается. Я конвертирую сложные научные алгоритмы, которые используют их.
Согласно документации FORTRAN:
aint (x) возвращает целое значение между x и 0, ближайшим x.
anint (x) возвращает ближайшее целое значение x, кроме случаев, когда на полпути
округляется до целого значения, большего по величине.
nint (x) преобразует x в округление формата int до ближайшего значения int, кроме
полпути округляются до значения int, большего по величине.
У кого-нибудь есть реализация этого в C #?
Это может быть сложно сделать это правильно.
(int) x соответствует aint ()
Convert.ToInt32 (x) не соответствует ни одному из перечисленных.
Trunc (x) не соответствует ни одному из вышеперечисленных.
Round (x) может соответствовать anint или nint.
Разница между anint и nint, по-видимому, является типом возврата, где anint возвращает значение двойной точности, а nint возвращает целое число. Используются оба (острый образец):
ДВОЙНАЯ ТОЧНОСТЬ A, B, C, D, E, F, G
... значения, установленные здесь ...
F = ANINT (A-B) + ANINT (C-D) + ANINT (B + D-E)
G = NINT (F) + 1D0;
Возможно, эксперт ФОРТРАН мог бы помочь прояснить, почему автор решил использовать оба (я предполагаю, что это было преднамеренно).