Skip to content

Instantly share code, notes, and snippets.

@reinaldo
Last active March 6, 2021 03:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reinaldo/29a569e6870a414847de698e8142bdc1 to your computer and use it in GitHub Desktop.
Save reinaldo/29a569e6870a414847de698e8142bdc1 to your computer and use it in GitHub Desktop.
Números, suas formatações e as Bibliotecas Numéricas.
-- O arredondamento para baixo do número escolhido se dá desta maneira:
valorx = 1.1
arredondado = tonumber(string.format("%.0f", valorx))
print(arredondado)
-->> 1
valorx = 1.4
arredondado = tonumber(string.format("%.0f", valorx))
print(arredondado)
-->> 1
valorx = 1.49
arredondado = tonumber(string.format("%.0f", valorx))
print(arredondado)
-->> 1
-- O arredondamento para cima do número escolhido se dá desta maneira:
valorx = 1.7
print(math.floor(valorx + 0.5))
-->> 2
-- ou
valorx = 1.7
arredondado = tonumber(string.format("%.0f", valorx))
print(arredondado)
-->> 2
io.write("5 + 3 = ", 5+3, "\n")
io.write("5 - 3 = ", 5-3, "\n")
io.write("5 * 3 = ", 5*3, "\n")
io.write("5 / 3 = ", 5/3, "\n")
io.write("5.2 % 3 = ", 5%3, "\n")
-- Gera valor aleatorio entre 0 and 1
io.write("math.random() : ", math.random(0,3), "\n")
-- Apresenta float com 10 casas decimais
print(string.format("Pi = %.10f", math.pi))

Casas decimais

Controlar casas decimais é bem fácil em Lua. O exemplo abaixo limita o número de casas decimais na tela.

print(string.format("%0.3f", 10.12345)) -->> 10.123
print(100 + "7")
-->> 107
print("1000" + 234)
-->> 1234
print("olá" + 234)
-->> erro na tela
print(234 + "1000")
-->> 1234

Coerção, das ist gut!

Coerção significa conversão automática de tipos.

Para realizar cálculos, Lua converte automaticamente os tipos de sequência e número para o formato correto.

Por exemplo: se você tentar aplicar uma operação aritmética a uma string, Lua tentará converter essa string em um número primeiro. Caso contrário, a operação não funcionará.

Vale saber que se a sequência não puder ser convertida em um número, um erro será gerado.

Convertendo uma coisa em outra

Você pode converter seqüências de caracteres em números usando a função especial, chamada tonumber()

tonumber(x)

Esta função tem a tarefa de receber um argumento string, transformá-lo em número e devolvê-lo para quem a chamou.

local cos, sin = math.cos, math.sin
local pi,tan,exp = math.pi,math.tan,math.exp
--- variacoes para o math.floor
print(math.floor(12.5928)) --> 12
print(math.floor(12.5928 * 10) / 10) --> 12.5
print(math.floor(12.5928 * 100) / 100) --> 12.59
-- diferentes formatacoes de campo
taxa_importacao = 15.521825348912
company = "vacinaneles.com"
minhafrase = string.format("O preco da vacina da empresa %s eh %f.", company, taxa_importacao)
print(minhafrase)
minhafrase = string.format("O preco da vacina da empresa %s eh %.2f.", company, taxa_importacao)
print(minhafrase)
minhafrase = string.format("O preco da vacina da empresa %s eh %8.2f.", company, taxa_importacao)
print(minhafrase)
minhafrase = string.format("O preco da vacina da empresa %s eh %08.2f.", company, taxa_importacao)
print(minhafrase)
minhafrase = string.format("O preco da vacina da empresa %s eh %03.2f.", company, taxa_importacao)
print(minhafrase)
-- resultado
-->> O preco da vacina da empresa vacinaneles.com eh 15.521825.
-->> O preco da vacina da empresa vacinaneles.com eh 15.52.
-->> O preco da vacina da empresa vacinaneles.com eh 15.52.
-->> O preco da vacina da empresa vacinaneles.com eh 00015.52.
-->> O preco da vacina da empresa vacinaneles.com eh 15.52.
idade = 17
if idade < 16 then
print(string.format("Voce ainda eh um jovem com %d anos\n", idade))
elseif (idade == 34) or (idade==35) then
print("Ficando mais velho...")
else
print("Olah Aborrescente!")
end
podevotar = idade > 18 and true or false
io.write("Posso votar?: ", tostring(canVote))

Número

Número é qualquer série de dígitos; pode começar com um sinal de menos e incluir um ponto decimal.

Os números não são nada especiais. Você pode usar números sem frações (inteiros) e números com frações (flutuantes ou valores de ponto flutuante).

a = 0.5 
a = 4

As operações de adição, subtração, multiplicação e divisão podem ser usadas em expressões para fazer matemática com números.

Os parênteses podem ser usados para agrupar operações quando você precisa impor a prioridade das operações.

1.0045662100457 

-5

+128

2 + ( 3 - 4 )

2200 / 6  /  365 
--[[
Nome da funcao: math.sqrt
Descricao: Retorna a raiz quadrada de um determinado número. Apenas argumentos não negativos são permitidos.
]]
print ( math.sqrt (100) )
-->> 10
print ( math.sqrt (1234) )
-->> 35.128336140501
print ( math.sqrt (-7) )
-->> -nan
--[[
Nome da Funcao: math.abs
Descricao: Retorna o valor absoluto ou não negativo de um determinado valor.
]]
print ( math.abs (-100) )
--> 100
print ( math.abs (25.67) )
--> 25.67
print ( math.abs (0) )
--> 0
--[[
Nome da funcao: math.acos, math.asin
Descricao: Retorna o cosseno inverso e o seno em radianos do valor fornecido.
]]
print ( math.acos(1) )
-->> 0
print ( math.acos(0) )
-->> 1.5707963267949
print ( math.asin(0) )
-->> 0
print ( math.asin(1) )
-->> 1.5707963267949
--[[
Nome da funcao: math.atan
Descricao: Retorna a tangente inversa em radianos. Podemos fazer isso fornecendo y / x nós mesmos ou podemos passar y e x math.atan para fazer isso.
]]
c, s = math.cos (0,8), math.sin (0,8)
print ( math.atan (s / c) )
-->> 0,8
print ( math.atan (s, c) )
-->> 0,8

Biblioteca Matemática

Lua está equipada com uma biblioteca matemática, portanto enjoy :)

--[[
Nome da funcao: math.cos, math.sin, math.tan
Descricao: Retorne o valor cosseno, seno e tangente para um determinado valor em radianos.
]]
print ( math.cos (math.pi / 4) )
-->> 0.70710678118655
print ( math.sin (0.123) )
-->> 0.12269009002432
print ( math.tan (5/4) )
-->> 3.0095696738628
print ( math.tan (0.77) )
-->> 0.96966832796149
--[[
Nome da funcao: math.deg, math.rad
Descricao: Converta de radianos em graus e vice-versa.
]]
print ( math.deg(math.pi) )
-->> 180
print ( math.deg(math.pi / 2) )
-->> 90
print ( math.rad(180) )
-->> 3.1415926535898
print ( math.rad(1) )
-->> 0.017453292519943
--[[
Nome da funcao: math.exp, math.log
Descricao:
math.exp(valor) retorna e natural (a base dos logaritmos naturais) elevado à potência valor.
math.log() retorna o inverso disso.
math.exp(1) retorna e natural.
]]
print ( math.exp(0) )
-->> 1
print ( math.exp(1) )
-->> 2.718281828459
print ( math.exp(27) )
-->> 532048240601.8
print ( math.log (532048240601) )
-->> 26.999999999998
print ( math.log (3) )
-->> 1.0986122886681
--[[
Nome da funcao: math.ceil, math.floor
Descricao: Retorne o número inteiro não maior ou menor que o valor fornecido (mesmo para negativos).
]]
print ( math.floor (0.5) )
-->> 0
print ( math.ceil (0.5) )
-->> 1
print ( math.floor (-0.5) )
-->> -1
print ( math.ceil (-0.5) )
-->> -0
--[[
Nome da funcao: math.min, math.max
Descricao: Retorne o valor mínimo ou máximo de uma lista de argumentos de comprimento variável.
]]
print ( math.min(1,2) )
-->> 1
print ( math.min(1.2, 7, 3) )
-->> 1.2
print ( math.min(1.2, -7, 3) )
-->> -7
print ( math.max(1.2, -7, 3) )
-->> 3
print ( math.max(1.2, 7, 3) )
-->> 7
--[[
Nome da funcao: math.modf
Descricao: Retorna as partes integrais e fracionárias do número fornecido.
]]
print ( math.modf(5) )
-->> 5 0
print ( math.modf(5.3) )
-->> 5 0.3
print ( math.modf(-5.3) )
-->> -5 -0.3
--[[
Nome da funcao: math.pi
Descricao: Esta é uma parte da constante Pi.
]]
print ( math.pi )
-->> 3.1415926535898
--[[
Nome da funcao: math.random, math.randomseed
math.random() gera números pseudo-aleatórios uniformemente distribuídos. O fornecimento de argumento altera seu comportamento:
math.random() sem argumentos gera um número real entre 0 e 1.
math.random(upper)gera números inteiros entre 1 e superior (ambos inclusivos).
math.random(lower, upper) gera números inteiros entre inferior e superior (ambos inclusivos).
]]
print ( math.random () )
-->> 0.0012512588885159
print ( math.random () )
-->> 0.56358531449324
print ( math.random (100) )
-->> 20
print ( math.random (100) )
-->> 81
print ( math.random (70,80) )
-->> 76
print ( math.random (70,80) )
-->> 75

Problemas ao converter: o que não se deve

tonumber() returna nil se o argumento inserido não pode ser convertido em um número.

-- O argumento é uma frase e deveria ser número, logo retornará erro!
print(tonumber("Curso de Química!"))
-->> nil
print(tonumber( "123" ) + 25)
-->> 148
x = tonumber( "123.456e5" )
print(x)
-->> 12345600

TRUNC para arredondar

Ao truncar um número, você está removendo as casas decimais depois de tê-lo arredondado para cima ou para baixo.

Um exemplo clássico está para os decimais 0.5 a 0.9 que arredondam para 1.

Mais exemplos:

1.5 --> 2 

1.7 --> 2

1.9 --> 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment