Самый безопасный способ преобразовать плавание в целое число в Python?

mod равно 0, когда оно делится, и в Хаскеле тоже не до конца. Попробуйте вместо этого:

checkLeap :: (Int, Int, Int) -> Bool
checkLeap (x,y,z)
  | z `mod` 400 == 0                   = True
  | z `mod` 4 == 0 && z `mod` 100 /= 0 = True
  | otherwise                          = False
191
задан Mark Dickinson 5 August 2014 в 07:21
поделиться

4 ответа

Все целые числа, которые могут быть представлены числами с плавающей запятой, имеют точное представление. Так что вы можете безопасно использовать int для результата. Неточные представления возникают только в том случае, если вы пытаетесь представить рациональное число со знаменателем, не являющимся степенью двойки.

То, что это работает, совсем нетривиально! Свойство представления с плавающей запятой IEEE заключается в том, что int∘floor = ⌊⋅⌋, если величина рассматриваемых чисел достаточно мала, но возможны различные представления, где int (floor (2.3)) может быть 1.

To цитата из Википедии ,

Любое целое число с абсолютным значением меньше или равным 2 24 может быть точно представлено в формате одинарной точности, а любое целое число с абсолютным значением меньше или равно 2 53 может быть точно представлено в формате двойной точности.

166
ответ дан 23 November 2019 в 05:34
поделиться

df ['Column_Name']=df ['Column_Name'].astype (интервал)

0
ответ дан 23 November 2019 в 05:34
поделиться

math.floor всегда будет возвращать целое число, и поэтому int (math.floor (some_float)) никогда не приведет к ошибкам округления.

Ошибка округления могла уже быть введена в math.floor (some_large_float) , хотя, или даже при сохранении большого числа в float в первую очередь. (Большие числа могут потерять точность при хранении в числах с плавающей запятой.)

7
ответ дан 23 November 2019 в 05:34
поделиться

Вы можете использовать функцию round. Если вы не используете второй параметр (# значащих цифр), то, я думаю, вы получите желаемое поведение.

Вывод IDLE.

>>> round(2.99999999999)
3
>>> round(2.6)
3
>>> round(2.5)
3
>>> round(2.4)
2
44
ответ дан 23 November 2019 в 05:34
поделиться