Приведение к Int против Math.floor - PullRequest
0 голосов
/ 11 февраля 2019

Безопасно ли использовать приведение к int вместо Math.floor для преобразования значений типа float / double в целые числа?

var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

В этом случае и Case к Int, и Math.floor будут возвращать целочисленное значение.Если x = 3,5, то обе функции вернут 3 на выходе. Приведение к типу int - это функция для преобразования переменной любого типа данных в целочисленный тип, с другой стороны, функция Math.floor будет преобразовывать только десятичное число в целое число, не преобразуя тип данных.Но результат будет другим в случае отрицательных значений, потому что Cast to Int приближается к нулю, а Math.floor приближается к отрицательной бесконечности.Таким образом, в этой перспективе, если вы работаете с действительными числами (как положительными, так и отрицательными), тогда небезопасно использовать Cast to Int вместо Math.floor для получения точного вывода.

0 голосов
/ 11 февраля 2019

Поскольку код Vala переведен на C, это тот же вопрос, что и Приведение к int против пола

TL; DR: да, это безопасно, но результат Math.floor иПри задании отрицательных чисел значения типа float / double различаются.

Обратите внимание, что Math.floor является частью библиотеки GLib и поэтому недоступен в профиле POSIX.

...