Pular para o conteúdo

Números

Integer, Float e Decimal — a divisão, o arredondamento, e o 0,1 + 0,2.

Três tipos de número, e cada um existe por um motivo. Integer é exato e sem limite de tamanho. Float é rápido e aproximado. Decimal é exato com casas — o que dinheiro precisa.

dataforge
assert typeof(7) is "Integer"
assert typeof(7.0) is "Float"
assert typeof(7.0d) is "Decimal"

assert 2 ** 100 is 1267650600228229401496703205376    // inteiro nao estoura
assert 7 / 2 is 3.5          // '/' sempre da Float
assert 7 ~/ 2 is 3           // divisao inteira
assert -7 ~/ 2 is -4         // arredonda para BAIXO, e nao para o zero
assert 7 % 3 is 1
assert 1_000_000 is 1000000  // o '_' e so para ler

O 0,1 + 0,2#

dataforge
adopt Arcane.Decimal as Dec

assert 0.1 + 0.2 isnt 0.3                    // Float: aproximado
assert 0.1d + 0.2d is 0.3d                   // Decimal: exato
assert Dec.texto(Dec.soma([19.99d, 0.01d])) is "20.00"
out 0.1 + 0.2

Arredondar#

dataforge
adopt Arcane.Decimal as Dec

assert round(2.675, 2) is 2.67          // Float: 2.675 e na verdade 2.67499…
assert Dec.texto(Dec.arredondar(2.675d, 2)) is "2.68"   // Decimal: o que se espera
assert floor(-2.5) is -3 and ceil(-2.5) is -2
QueroUse
contar, indexar, somar inteirosInteger
medir, calcular estatística, ciênciaFloat
dinheiro, imposto, qualquer coisa que se concilieDecimal (19.99d)