Was ist mit diesem in Coldfusion der DecimalFormat () Funktion auf? Wie bekomme ich das richtige Ergebnis?

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

  •  07-07-2019
  •  | 
  •  

Frage

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

AUSGÄNGE:

DecimalFormat (25,625): 25,62

DecimalFormat (18,125): 18,13

DecimalFormat (6.875): 6,88

STATT outputing:

DecimalFormat (25,625): 25,63

DecimalFormat (18,125): 18,13

DecimalFormat (6.875): 6,88

Es scheint, dass eine Variable, die das Ergebnis einer mathematischen Berechnung macht DecimalFormat () verhält sich anders. Jede schnelle Lösung, ohne zu graben in Java?

War es hilfreich?

Lösung

Ich denke, das Problem ist nicht DecimalFormat(), aber die typische Gleitkomma-Rundungsfehler.

siehe: PrecisionEvaluate()

Andere Tipps

DecimalFormat ist eine Formatierungsfunktion. Nicht eine mathematische Funktion. Seine Aufgabe ist nicht Ihre Nummer für Sie abzurunden, leider fehlt CF gute mathematische Funktionen für Dezimalzahlen, so dass Sie Ihre eigenen schreiben müssen.

Hier ist man jemand auf der CF-LiveDocs Seite für rundes schrieb ():

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

Eine schnelle Lösung wäre die Linie 1 bis number1 = NumberFormat(20.5/80 * 100,'9.999') ändern

Bitte beachten Sie die CF-Dokumentation Number und tun auf rund eine Seite suchen einige spezifische Informationen anzuzeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top