Cosa succede con questo nella funzione DecimalFormat () di ColdFusion? Come ottengo il risultato corretto?
-
07-07-2019 - |
Domanda
<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>
USCITE:
DecimalFormat (25.625): 25.62
DecimalFormat (18.125): 18.13
DecimalFormat (6.875): 6.88
DOPO L'USCITA:
DecimalFormat (25.625): 25.63
DecimalFormat (18.125): 18.13
DecimalFormat (6.875): 6.88
Sembra che una variabile risultante da un calcolo matematico induca DecimalFormat () a comportarsi diversamente. Qualche soluzione rapida, senza scavare in Java?
Soluzione
Penso che il problema non sia DecimalFormat ()
, ma i tipici errori di arrotondamento in virgola mobile.
vedi: PrecisionEvaluate ()
Altri suggerimenti
DecimalFormat è una funzione di formattazione. Non una funzione matematica. Il suo compito non è quello di arrotondare il numero per te, sfortunatamente CF non ha buone funzioni matematiche per i decimali, quindi dovrai scrivere il tuo.
Qui ce n'è uno che qualcuno ha scritto sulla pagina vissuta di CF per 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 soluzione rapida sarebbe quella di cambiare la riga 1 in number1 = NumberFormat (20.5 / 80 * 100, '9.999')
Consultare la documentazione CF NumberFormat e fai una ricerca per pagina in tondo per vedere alcune informazioni specifiche.