我正在学习 Julia,我对 Types 有点困惑。我的是一个非常基本的问题。我明白如果我写
x = 64.0::MyType
Run Code Online (Sandbox Code Playgroud)
x 应包含值 64,Type 等于 MyType。但是如果我写
x = 64.0::Float32
Run Code Online (Sandbox Code Playgroud)
我收到错误
ERROR: TypeError: in typeassert, expected Float32, got Float64
Run Code Online (Sandbox Code Playgroud)
我发现以下没有给我一个错误
x = convert(Float32,64.0)
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?好像太纠结了。
@NilsGudat 和@DaveNewton 的答案都正确但不完整,所以让我提供一些详细说明。
请务必注意,您的第一个示例x = 64.0::MyType, 是不是你如何创建一个号码类型的MyType。a::MyType当出现在表达式的右侧时,表示法是类型断言。它将返回aif的值a是MyType( a isa MyType)的子类型,但如果a不是MyType它的子类型则抛出异常。在您日常的 Julia 代码中,您不太可能经常需要它。有关类型声明和断言的更多信息,请参阅有关类型声明的手册部分和性能提示中的本部分。
正如@DaveNewton 指出的那样,Julia 提供了用于创建数字的文字语法Float32。语法类似于 的科学记数法Float64,例如4.5e2,除了e被替换为f:
julia> 4.5f2
450.0f0
julia> 450f0
450.0f0
julia> typeof(4.5f2)
Float32
Run Code Online (Sandbox Code Playgroud)
请注意,附加::Float32到Float32文字值不是必需的,实际上是多余的。因此,不是x = 64.0f0::Float32按照@DaveNewton 的建议进行编写,您只需编写x = 64.0f0.
朱莉娅默认为Float64. Float32文字需要一个f(而不是一个e):
x = 64.0f0::Float32
Run Code Online (Sandbox Code Playgroud)
正如雷纳特补充的那样:
https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/
(这是我用来回答这个问题的,因为我不认识 Julia。但我知道如何搜索 :)
问题是输入64.0自动是一个Float64:
julia> typeof(64.0)
Float64
Run Code Online (Sandbox Code Playgroud)
因此你想直接构造一个Float32像这样的:
julia> Float32(64.0)
64.0f0
julia> typeof(ans)
Float32
Run Code Online (Sandbox Code Playgroud)