Você poderia ajudar - como eu tenho uma situação estranha que, quando digito um número 22222.09482 na célula, vejo um número diferente 22222.0948199999 na barra de fórmulas. Abaixo está o instantâneo do problema.
Vejo o mesmo comportamento ao inserir os seguintes números:
22222.09482
33333.09482
44444.09482
55555.09482
mas quando insiro 11111.09482 e 66666.09482, 77777.09482 .. até 99999.09482, eles são exibidos corretamente. Não sei se isso está relacionado ao arredondamento? Não configurei nenhum perfil de arredondamento. Você poderia me ajudar a resolver o problema.
microsoft-excel
microsoft-excel-2016
user954171
fonte
fonte
ROUND()
?=ROUND(A1,5)
, copie / cole os dados como Valores e remova os números originais?ROUND()
mostra os dígitos corretos, mas copiar / colar como valor o leva de volta à edição original!ROUND(A1,5)
novamente os valores colados. Em seguida, copie / cole-os como valores eRound()
, novamente, copie / cole. ...: P ... isso é interessante, e parece que @EugenRieck tem o raciocínio. Boa pergunta!double
tem precisão suficiente para que, quando mostra arredondados os valores corretos como a maioria das pessoas esperaRespostas:
Isso é um bug.
O Excel usa a representação de precisão dupla IEEE usual, de acordo com outras respostas. Sua precisão é de 53 dígitos binários significativos, o que corresponde a aproximadamente 16 dígitos decimais.
É sempre "seguro" exibir os 15 primeiros dígitos decimais significativos. No sentido de que qualquer número "apresentado" decimal com 15 dígitos pode ser distinguido com segurança dos números obtidos, alterando a décima quinta figura decimal por um. Por exemplo, os números de 15 dígitos:
mapear para três números distintos de precisão dupla. Nenhum desses três será "vizinhos" na representação de precisão dupla, neste caso em particular.
Portanto, confundir os dois primeiros na exibição do usuário, é um erro do Excel.
De fato, nesse domínio (entre 16384 e 32768), a precisão absoluta é de 2 a 38 e os seguintes números são representáveis:
Para aprofundar, tente digitar
22222.09482
em uma célula e digitar22222.0948199999
(cinco noves) em outra célula. O Excel deve escolher os dois representantes do IEEE indicados pela seta acima. E acho que sim, porque você pode calcular a diferença dessas duas células para obter9.82254E-11
. Mas ambos são mostrados da mesma maneira.Se o Excel tivesse mostrado os 17 primeirosdígitos, seria útil escolher exatamente qual é o número IEEE "abaixo" do número decimal. Nesse caso:
Mas mostrar 15 dígitos arredondados de maneira incorreta é enganoso e inútil.
Antes que alguém afirme que é intencional, por que
8.7
não mostra o mesmo comportamento? O número de precisão dupla mais próximo de8.7
é:portanto, deve mostrar como
8.69999999999999
se isso fosse intencional. Mas isso não acontece.fonte
2.1 + 2.2
retorna4.80000001
?" e recebo muitas respostas dizendo que é isso que devo esperar quando uso o ponto flutuante.O Excel armazena números no formato de ponto flutuante binário IEEE 754 de 64 bits. A chave é "lojas" - a mudança de decimal para binário ocorre sempre que um número é armazenado, não apenas quando é usado em um cálculo real.
Um bom artigo sobre isso está em Noções básicas sobre precisão de ponto flutuante, também conhecido como "Por que o Excel me dá respostas aparentemente erradas?"
É possível criar um programa de planilha que lide com números realmente grandes com muitos dígitos significativos. Mas não é terrivelmente prático. O Excel poderia ter sido projetado para usar o formato decimal128 IEEE 754 , que permite 34 dígitos decimais - mais que o suficiente para armazenar 22222.09482. Mas, em vez disso, usa o formato binário64 Double Precision , muito mais comum , com 53 bits de precisão, com pouco menos de 16 dígitos. Embora você possa pensar que isso seria suficiente para um número com apenas 10 dígitos, a conversão de decimal em binário complica um pouco as coisas - ou seja, 2222209482 pode ser armazenado 100% corretamente como um número binário64, mas 22222.09482 não pode.
Lembre-se de que normalmente as planilhas são usadas para dados financeiros, que normalmente não exigem tantos dígitos de precisão, ou para modelagem "what if" em uma variedade de cenários, nos quais não é necessário um nível muito alto de precisão. Certamente existem outras ferramentas (e provavelmente outros programas de planilhas, mas não pesquisei recentemente) que, por padrão ou por definições de configuração especiais, podem usar um formato numérico maior, mas o Excel não é um deles.
Para aqueles que apontam que o LibreOffice lida melhor com isso, a aparência pode enganar. Veja este post para mais detalhes. Parece que o LibreOffice lida com grandes números de maneira um pouco diferente, mas tem a mesma representação básica de ponto flutuante de 64 bits com problemas semelhantes.
fonte
22222.09482
é armazenado como1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)
no IEEE 754, ou em outras palavras, exatamente como1.35632902954101553 * 2^14
é22222.0948199999984353787904
.0.2
e0.1
não pode ser representada exatamente (a fração 1/5 (um quinto) tem uma expansão binária recorrente infinita). No entanto, o Excel mostra as coisas de uma maneira confusa.Money
ouBigInteger
formato, que geralmente usa o formato de armazenamento decimal .Ao fazer seus cálculos, o Excel precisa encontrar uma boa representação binária interna para os números que usa. No seu caso, ele usa um número de ponto flutuante e, de fato, esse formato de dados tem uma aproximação (muito boa) para o seu número, mas não corresponde exatamente. Portanto, se você não informar explicitamente ao Excel qual formato de saída usar, ele fará um "melhor esforço", resultando em uma saída mais próxima do valor calculado internamente, mas não é exatamente o texto digitado.
Só para deixar isso claro: Entendendo que o texto digitado representa um número e a conversão da sequência de dígitos em um número já atende à definição de "cálculo" de cima.
EDITAR
Eu não deixei claro o suficiente, que considero a escolha de usar uma representação de ponto flutuante de 64 bits realmente boa: o Excel não é uma ferramenta para cientistas, onde um erro de arredondamento no décimo primeiro dígito após o ponto decimal gera um grande impacto, mas os contadores não querem que sua velocidade de processamento seja reduzida em um fator de milhões para acomodar uma fonte de cálculo inexato que pode se manifestar em números que eles nunca usam.
Se você usar um programa de planilha para o que foi projetado e usar formatação explícita de saída para garantir que esses efeitos nunca cheguem ao domínio visível, você estará bem.
fonte
Alguns números podem ser representados corretamente e outros não.
Defina a precisão exibida adequadamente para seus cálculos e use a função round () .
Explicação:
Wikipedia - " Precisão numérica no Microsoft Excel "
Guia de computação numérica da Oracle - " O que todo cientista da computação deve saber sobre aritmética de ponto flutuante "
Solução:
Journal of Accountancy - " Corrigido pelos erros de cálculo do Excel ":
fonte
Como eu tenho certeza que você sabe, os computadores trabalham internamente apenas usando zeros e uns (também conhecidos como bits) e têm um número fixo de bits para representar um valor (normalmente 64 bits atualmente). Isso significa que o número de valores diferentes que podem ser representados é de 2 à 64ª potência. É um número enorme, com certeza, mas o número de valores possíveis é finito, portanto nem todos os números podem ser representados. Quando encontra um número que não pode representar exatamente, ele é automaticamente substituído pelo mais próximo que pode representar. É isso que você está vendo.
fonte
Os computadores fazem suas contas em binário e quase sempre usam ponto flutuante para valores não inteiros. Os únicos valores fracionais que podem ser representados precisamente em ponto flutuante devem ser a soma de alguma combinação de potências fracionárias de 2 (1/2, 1/4, 1/8, 1/16, 1/32, ...) terminando no limite de precisão projetado (geralmente 53 bits). Esses valores nem sempre têm uma representação exata ou exata em decimal e, inversamente, nem todos os valores fracionários que você pode representar exatamente em decimal terão uma representação exata em binário. Por exemplo: 0.1. Não pode ser representado como uma soma de potências fracionárias de 2 que não dura para sempre.
Quando você insere um valor decimal em sua planilha, ele será convertido e armazenado em binário, e casos como você descreveu se tornarão a aproximação mais próxima que pode ser representada em binário. Quando exibido, é convertido novamente em decimal, exigindo novamente uma aproximação, que pode não ser convertida novamente exatamente na mesma representação que você inseriu.
Por que 53 bits (mais ou menos)? Como o padrão típico para armazenar pontos flutuantes de "dupla precisão" usa 64 bits, nos quais há uma mantissa (também chamada de significando), um indicador de sinal e um expoente. O expoente geralmente recebe 10 bits, o sinal leva um, deixando 53 para a mantissa. Isto é para armazenamento. Os cálculos geralmente são feitos usando 80 bits e arredondados para trás.
Há situações em que os computadores funcionarão na base 10, especialmente ao trabalhar com valores monetários nos quais artefatos de arredondamento não são aceitáveis.
fonte
Como muitos acima disseram, este é um erro de representação interna. O Excel optou pela precisão dupla, números de ponto flutuante de 64 bits. Isso fornece 2 64 valores possíveis. O domínio dos números reais contém uma infinidade de valores; portanto, quando você tenta usar um que não pode ser representado pelo Excel, ele usa o mais próximo que pode ser representado.
Vi comentários dizendo que, dada a memória infinita, qualquer número real pode ser representado. É verdade, mas não existe "memória infinita", então esse é um ponto discutível. Outros afirmaram que o Excel poderia ter usado uma representação interna maior, por exemplo, 128 bits. É verdade que os computadores são melhores em operações matemáticas em números representados com o número de bits que corresponde ao tamanho do barramento do processador. Portanto, um computador de 32 bits será mais rápido em operações matemáticas em números de 32 bits e um computador de 64 bits será mais rápido em operações matemáticas em números de 64 bits. Se e quando houver um computador de 128 bits, podemos esperar que o Excel mude para a representação numérica de 128 bits. Isso ainda fornecerá um conjunto muito grande, mas limitado, de números que podem ser representados.
Se sua preocupação é com a aparência dos números na planilha, o uso de uma precisão definida (número de casas decimais) fornecerá resultados consistentes. Se você se preocupa com a diferença entre o número digitado e o número real armazenado pelo Excel, você está certo. A diferença é real e o erro será realizado nos cálculos que você fizer. Receio que você esteja preso com esse erro. Essa é uma limitação do Excel, não um bug, como alguns declararam. Não é provável que mude tão cedo, por isso, se não for aceitável para você, sugiro que procure outro aplicativo de planilha que possa representar números com maior precisão. Mas lembre-se de que, se você encontrar um aplicativo desse tipo, a limitação ainda estará lá. É apenas o tamanho do erro que é diferente.
fonte