Как мне преобразовать число с плавающей точкой в ​​Int в Julia v1.0.3 - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь преобразовать число с плавающей запятой:

xmax = maximum(x_holder)-30
convert(Int32, xmax)

Однако я получаю следующую ошибку:

ОШИБКА: LoadError: InexactError: Int32 (Int32, 30525.8) Stacktrace:

... когда я пытаюсь конвертировать его.Что я делаю неправильно?Я уже посмотрел на документы, и они не помогли мне.

ссылка на документацию

Ответы [ 3 ]

3 голосов
/ 22 марта 2019

Как правильно указано DNF в комментариях, нет необходимости проходить через Int64 на пути к Int32

Как насчет использования trunc

x = 3.141592653589793238462643383279502884197
print(trunc(Int32, x)) // print 3
print(typeof(trunc(Int32, x))) //prints Int32

Обновлен в соответствии с конкретным примером в вопросе

Использование floor

x = 3.141592653589793238462643383279502884197
xmax = maximum(x)-30
xmaxconverted = floor(Int32, xmax) // -26
print(typeof(xmaxconverted)) // prints Int32

Или использование trunc

x = 3.141592653589793238462643383279502884197
xmax = maximum(x)-30
xmaxconverted = trunc(Int32, xmax) // -27
print(typeof(xmaxconverted)) // prints Int32
1 голос
/ 22 марта 2019

Это так просто:

round(Int32, xmax)

Вы можете предоставить всевозможные целочисленные типы T (как в round(T, xmax)), если они имеют смысл, и преобразование работает. Если вам нужно другое поведение округления, используйте floor или ceil.

Это предпочтительнее, чем Int32(round(xmax)), для которого требуется отклонение от маршрута, сначала сделав округлое число с плавающей точкой, а затем преобразовав его в Int32. И, конечно, намного лучше, чем convert(Int32, round(Int, xmax)), что является очень странным решением.

Редактировать: В случае, если неясно, кстати, вам нужно назначить вывод функции round для новой переменной. Ввод не будет округлен на месте :

julia> xmax = 30525.8
30525.8

julia> xnew = round(Int32, xmax)
30526

julia> typeof(xnew)
Int32

julia> typeof(xmax)  # <- still the same
Float64
1 голос
/ 22 марта 2019

Или, может быть:

toInt(x) = Int(floor(x))

xmax = toInt(maximum(x_holder)-30)
...