¿Qué pasa con esto en la función DecimalFormat () de ColdFusion? ¿Cómo obtengo el resultado correcto?

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

  •  07-07-2019
  •  | 
  •  

Pregunta

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

OUTPUTS :

DecimalFormat (25.625): 25.62

DecimalFormat (18.125): 18.13

DecimalFormat (6.875): 6.88

EN LUGAR DE SALIR:

DecimalFormat (25.625): 25.63

DecimalFormat (18.125): 18.13

DecimalFormat (6.875): 6.88

Parece que una variable que es el resultado de un cálculo matemático hace que DecimalFormat () se comporte de manera diferente. ¿Alguna solución rápida, sin profundizar en Java?

¿Fue útil?

Solución

Creo que el problema no es DecimalFormat () , sino los típicos errores de redondeo de punto flotante.

ver: PrecisionEvaluate ()

Otros consejos

DecimalFormat es una función de formateo. No es una función matemática. Su trabajo no es redondear su número por usted, desafortunadamente CF carece de buenas funciones matemáticas para decimales, por lo que tendrá que escribir el suyo.

Aquí hay alguien que escribió en la página de livedocs de CF para 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>

Una solución rápida sería cambiar la línea 1 a number1 = NumberFormat (20.5 / 80 * 100, '9.999')

Consulte la documentación de CF NumberFormat y realiza una búsqueda de página en ronda para ver información específica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top