Página 1 de 1

Precisão do função Round

Enviado: 21 Mar 2021 às 12:54
por BritoMarques
Olá a todos!
Estou com uma dúvida e gostaria de saber se poderia me esclarecer algo.

01-
Qdo salvo um valor através desta macro:

_____________________________________________________
Sub teste3()
Range("a3") = VBA.Round(0.4, 2)
End Sub
Aparece na barra de fórmula o valor 0,4 (td normal),
_____________________________________________________
Qdo salvo por esta outra macro:
Sub teste()
Dim xVarS As Single
xVarS = 0.4
Range("A1") = VBA.Round(xVarS, 2)
End Sub
Aparece na barra de fórmula o valor 0,400000005960464 ?
_____________________________________________________

A diferença está no fato de uma ter sido através de variável?
Tentei usar o trunc no VBA mas não consegui, coloquei WorkSheetFuncion. e VBA. e em nenhuma delas a opção Trunc estava disponível. Alguém sabe informar o pq do comportamento diferente da função Round?

Re: Precisão do função Round

Enviado: 21 Mar 2021 às 13:56
por Raygsson
@BritoMarques

Provavelmente esta relacionado ao arredondamento. Quando você não declara e tipifica uma variável ela assume o tipo Variant.
Variant pode guardar outros tipos de dados, o VBA decide qual tipo de acordo com o dado inserido na variável.
Se tiver optado por Double por exemplo, ele tem precisão dupla em números de ponto flutuante , isso pode arredondar o valor.
O tipo Single tem precisão simples, se comporta se forma diferente. Abaixo tem um tópico bem interessante sobre isso, está em inglês porém basta traduzir no navegador.
https://stackoverflow.com/questions/185 ... e-rounding

Att,
Raygsson

Re: Precisão do função Round

Enviado: 21 Mar 2021 às 16:55
por BritoMarques
Obg pela resposta Raygsson...
Um detalhe importate é que usando =ARRED(valor;2) este não gera "sujeira" após a segunda casa e sim apenas zeros como era de se esperar