O que se passa com isso em função do ColdFusion DecimalFormat ()? Como faço para obter o resultado correto?

StackOverflow https://stackoverflow.com/questions/1428173

  •  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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top