O que se passa com isso em função do ColdFusion DecimalFormat ()? Como faço para obter o resultado correto?
-
07-07-2019 - |
Pergunta
<cfset number1 = 20.5/80 * 100 />
<cfset number2 = 18.125 />
<cfset number3 = 6.875 />
<cfoutput>
DecimalFormat(#number1#): #DecimalFormat(number1)#<br />
DecimalFormat(#number2#): #DecimalFormat(number2)#<br />
DecimalFormat(#number3#): #DecimalFormat(number3)#
</cfoutput>
SAÍDAS:
DecimalFormat (25,625): 25.62
DecimalFormat (18,125): 18.13
DecimalFormat (6,875): 6,88
EM VEZ DE outputing:
DecimalFormat (25,625): 25.63
DecimalFormat (18,125): 18.13
DecimalFormat (6,875): 6,88
Parece que uma variável que é o resultado de um cálculo matemático faz DecimalFormat se comportam () de forma diferente. Qualquer solução rápida, sem cavar em java?
Solução
Eu acho que o problema não é DecimalFormat()
, mas o ponto flutuante típico erros de arredondamento.
ver: PrecisionEvaluate()
Outras dicas
DecimalFormat é uma função de formatação. Não uma função matemática. Seu trabalho não é para arredondar o número para você, infelizmente CF carece de boas funções matemáticas de casas decimais para que você terá que escrever o seu próprio.
Aqui é um alguém escreveu na página do CF livedocs para o round ():
<cffunction name="roundDecimal" returntype="numeric">
<cfargument name="num" type="numeric" required="yes">
<cfargument name="decimal" type="numeric" default="2" required="no">
<cfreturn round(num*10^decimal)/10^decimal />
</cffunction>
Uma solução rápida seria a linha de mudança 1 a number1 = NumberFormat(20.5/80 * 100,'9.999')
Por favor, consulte a documentação CF NumberFormat e fazer uma pesquisa página em volta para ver algumas informações específicas.