Cosa succede con questo nella funzione DecimalFormat () di ColdFusion? Come ottengo il risultato corretto?

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

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top