Conversões numéricas
Converta um valor numérico existente chamando o tipo de destino:
local count: Int = 42local compact = Int8(count)local unsigned = UInt32(count)local measurement = Float64(count)Essa sintaxe é conhecida pelo compilador; não se trata de uma sobrecarga comum nem de uma busca em tempo de execução. Ela aceita exatamente um operando numérico. Pop não realiza ampliação implícita entre valores existentes.
De inteiro para inteiro
Seção intitulada “De inteiro para inteiro”O resultado deve caber no intervalo exato do tipo de destino:
local wide: Int = 1_000local compact = UInt8(wide) -- falha: maior que 255A mudança de largura ou de sinal sempre é explícita. Uma conversão fora do intervalo causa uma falha NumericConversion; ela nunca dá a volta no intervalo.
De inteiro para ponto flutuante
Seção intitulada “De inteiro para ponto flutuante”A conversão usa o arredondamento IEEE para o valor mais próximo, com desempate para o par, no formato de destino:
local count: UInt64 = 9_007_199_254_740_993local approximate = Float64(count)Inteiros grandes podem ser arredondados porque um formato de ponto flutuante não consegue representar todos os inteiros de seu intervalo.
De ponto flutuante para inteiro
Seção intitulada “De ponto flutuante para inteiro”A conversão trunca em direção a zero:
local positive = Int32(12.75) -- 12local negative = Int32(-12.75) -- -12NaN, infinito e resultados fora do intervalo causam uma falha NumericConversion.
Largura de ponto flutuante
Seção intitulada “Largura de ponto flutuante”A conversão de Float32 para Float64 é exata. A conversão de Float64 para Float32 arredonda para a representação de destino:
local compact: Float32 = 1.25local wide = Float64(compact)local compactAgain = Float32(wide)Converter um valor para seu próprio tipo numérico canônico o preserva.
