基本类型转化


#1

怎么将Float64转换成Int, 或者说将Array{Float64, 1}转换成Array{Int, 1}?


#2

A 为待转换的数组,则 convert(Array{Int, 1}, A)Array{Int, 1}(A) 可将其转换为 Array{Int, 1} 类型的数组。如果 A 的元素不能转换为 Int 类型的数(例如 0.5),则转换会失败。


#3

比如说
A=[1.1, 2.2, 3.3] convert(Array{Int, 1}, A)
是不能转化的吧,A=[1.0, 2.0, 3.0]就可以被转换, 同样单个元素也是这样。
不知道有什么好的办法强转呢。


#4

convert.(Int,A)
文档搜索 Boardcast
当然了,1.2这种转Int会抛出InexactError,这个convert文档有写,所以你可能需要先取整一下才能转。
比如:convert.(Int,A .|> round)


#5

好的,非常感谢!


#6

round 应该不太合适,convert.(Int,A .|> floor)才对吧,浮点型强转到整形直接取的是小数点之前的值。还有有意思的是floor(1.999999999999999)=1.0,而floor(1.9999999999999999)=2.0:laughing:


#7

直接 A .|> floor 就行了,不用再转类型了。


#8

额,莫非我版本原因?
`` _
_ _ ()_ | Documentation: https://docs.julialang.org
() | () () |
_ _ | | __ _ | Type “?” for help, “]?” for Pkg help.
| | | | | | |/ ` | |
| | |
| | | | (
| | | Version 1.1.1 (2019-05-16)
/ |_|||_’_| | Official https://julialang.org/ release
|__/ |

julia> A=[1.1, 2.2, 3.3]
3-element Array{Float64,1}:
1.1
2.2
3.3

julia> A .|> floor
3-element Array{Float64,1}:
1.0
2.0
3.0

julia> A .|> floor .|> Int
3-element Array{Int64,1}:
1
2
3
``


#9

对不起啊,我记错了,确实不会直接转成整数。


#10

哈哈,没关系,同样非常感谢,一起学习!


#11

A .|> x->floor(Int, x)