Qu'est-ce qui se passe dans la fonction DecimalFormat () de ColdFusion? Comment puis-je obtenir le résultat correct?

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

  •  07-07-2019
  •  | 
  •  

Question

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

SORTIES:

DecimalFormat (25.625): 25.62

DecimalFormat (18.125): 18.13

DecimalFormat (6.875): 6.88

AU-DELÀ DE SORTIE:

DecimalFormat (25.625): 25.63

DecimalFormat (18.125): 18.13

DecimalFormat (6.875): 6.88

Il semble qu’une variable résultant d’un calcul mathématique donne à DecimalFormat () un comportement différent. Une solution rapide, sans fouiller dans Java?

Était-ce utile?

La solution

Je pense que le problème n'est pas DecimalFormat () , mais les erreurs d'arrondi typiques en virgule flottante.

voir: PrecisionEvaluate ()

Autres conseils

DecimalFormat est une fonction de formatage. Pas une fonction mathématique. Son travail n’est pas d’arrondir les chiffres pour vous. Malheureusement, CF manque de bonnes fonctions mathématiques pour les nombres décimaux, vous devrez donc écrire les vôtres.

Voici une personne qui a écrit sur 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>

Une solution rapide consisterait à remplacer la ligne 1 par number1 = NumberFormat (20.5 / 80 * 100, '9.999')

Veuillez consulter la documentation des FC NumberFormat et faites une recherche de page pour afficher des informations spécifiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top