Bom dia Tilo.
Seja bem-vindo ao fórum da comunidade do AutoHotkey.
Vou começar pela pergunta mais simples.
como fazer com que eles não apareçam numa próxima tentativa com scripts para fazer contas/equações/resolver_coisas_matemáticas?
Você pode fazer isso de várias formas. Um exemplo é usando a função embutida Round() para definir manualmente o número de casas decimais (arrendondando o número caso o número de casas ultrapasse esse montante). No caso do exemplo postado, o arredondamento simplesmente removeria as casas decimais com zeros.
Exemplo:
Code: Select all
InputBox, num, , , , 180, 100, , , , ,
Var1 := Round(num / 2 * 3)
Var2 := Round(num / 3 * 2)
MsgBox %Var1% / %Var2%
OBS: perceba que round pode forçar um número qualquer de casas decimais no resultado se você identificar isso no segundo parâmetro da função (exemplo:
Round(2.335,2) tem como resultado
2.34 e não simplesmente 2.
Agora vamos para a pergunta mais "complexa"
Mas porque aparece esse monte de zeros[?]
Isso tem a ver entre outras coisas com o funcionamento da memória dos computadores. A menor porção de memória endereçavel é um byte (então por exemplo, para acessar bits individuais um programa tem que acessar o byte e depois trabalhar ele para isolar o bit em questão, pois o bit não é diretamente acessível).
Parece algo pequeno, mas isso gera um problema considerável para se obter a eficiência máxima de armazenamento de informações pelos programas versus obter a máxima precisão de cálculo possível (diferenciar 0.9999999 e 1, por exemplo).
Por conta disso, a maioria das linguagens de programação requer que toda variável seja declarada indicando-se um tipo específico (por exemplo
float ou
integer). Ao fazer isso, o programador (supostamente conhecedor das vantagens e desvantagens de cada tipo) é o responsável por obter (ou não) a eficiência máxima do armazenamento para o seu programa.
Ocorre que no AutoHotkey a preferência é pela programação facilitada, de modo que o programador não é obrigado a declarar o tipo de variável para cada variável do seu programa. Para que isso funcione, no entanto, o próprio AutoHotkey decide internamente qual tipo usar, de modo que
dependendo do que você fizer com a variável, ele vai armazenar o resultado como integer ou como float, por exemplo.
Sendo assim você tem duas opções: OU você simplesmente aceita (manipulando se preciso) o tipo que o autohotkey define por padrão (mais fácil e prático) OU você mesmo define o tipo que quer (mais trabalhoso, porém com maior controle).
O comando Round() não manipula o tipo de dados das variáveis do programa em geral (tal como o comando SetFormat faz), mas com ele o AutoHotkey já é capaz de escolher melhor como armazenar os dados DAQUELA variável específica, pois você nesse comando você define explicitamente como o valor da variável deve ser exibido.
OBS: Se você quiser usar Round(), tenha em mente que ele deve ser usado sobre o valor final do cálculo. No exemplo abaixo, vemos que usar Round() no meio da fórmula NÃO indica ao autohotkey como deve ser o valor final:
Code: Select all
InputBox, num, , , , 180, 100, , , , ,
Var1 := Round(num) / 2 * 3 ; Aqui aplicamos sobre um componente da fórmula, o que não vai mudar a interpretação do AutoHotkey neste caso.
Var2 := Round(num / 3 * 2) ; Já aqui aplicamos sobre o valor final, o que vai fazer o autohotkey armazenar o número desse mesmo jeito.
MsgBox %Var1% / %Var2%
Dica: Você só deve se preocupar com isso se for EXIBIR um valor ao usuário. Enquanto isso não acontecer, deixe o AutoHotkey calcular do jeito dele mesmo. Isso facilita muito a sua programação e garante uma precisão maior nos cálculos.