2010-08-10 19 views
6

Ich habe eine Funktion ZeichenfolgeColdfusion seltsam zusätzlicher Platz

<cffunction name="convertToNumber" returntype="numeric"> 
    <cfargument name="separator" required="Yes" type="string" /> 
    <cfargument name="number" required="Yes" type="string" /> 

    <cfset LOCAL.arrSeparator = ["comma", "period", "lakh_crore"] /> 

    <cfif ARGUMENTS.separator eq "comma" or ARGUMENTS.separator eq "lakh_crore"> 
     <cfif ListLen(ARGUMENTS.number, ".") eq 2> 
      <cfset LOCAL.integral = ListFirst(ARGUMENTS.number, ".") /> 
      <cfset LOCAL.fractional = ListLast(ARGUMENTS.number, ".") /> 
     <cfelse> 
      <cfset LOCAL.integral = ARGUMENTS.number /> 
      <cfset LOCAL.fractional = "" /> 
     </cfif> 

     <cfset LOCAL.integral = Replace(LOCAL.integral, ",", "", "ALL") /> 
     <cfset LOCAL.returnValue = LOCAL.integral /> 

     <cfif Len(Trim(LOCAL.fractional))> 
      <cfset LOCAL.returnValue &= "." & LOCAL.fractional /> 
     </cfif> 
    </cfif> 

    <cfif ARGUMENTS.separator eq "period"> 
     <cfif ListLen(ARGUMENTS.number, ",") eq 2> 
      <cfset LOCAL.integral = ListFirst(ARGUMENTS.number, ",") /> 
      <cfset LOCAL.fractional = ListLast(ARGUMENTS.number, ",") /> 
     <cfelse> 
      <cfset LOCAL.integral = ARGUMENTS.number /> 
      <cfset LOCAL.fractional = "" /> 
     </cfif> 

     <cfset LOCAL.integral = Replace(LOCAL.integral, ".", "", "ALL") /> 
     <cfset LOCAL.returnValue = LOCAL.integral /> 

     <cfif Len(Trim(LOCAL.fractional))> 
      <cfset LOCAL.returnValue &= "." & LOCAL.fractional /> 
     </cfif> 
    </cfif> 

    <cfreturn LOCAL.returnValue /> 

</cffunction> 

<cfset separatorNumber = StructNew() /> 
<cfset separatorNumber.comma = "1,234,567,890.123456"> 
<cfset separatorNumber.period = "1.234.567.890,123456"> 
<cfset separatorNumber.lakh_crore = "1,23,45,67,890.123456"> 

<cfloop collection="#separatorNumber#" item="separator"> 
    <p> 
     #separator# : 
     <input type="Text" value="#convertToNumber(separator, separatorNumber[separator])#"> 
     Length : #Len(convertToNumber(separator, separatorNumber[separator]))# 
    </p> 
</cfloop> 

die Länge 17 ist an der Nummer zu konvertieren, aber im Eingangstext hinzuzufügen zusätzliche Leerräume auf dem ersten Zeichen. Ich weiß wirklich nicht, wie der zusätzlichen Leerraum zu entfernen, und wenn ich ToString hinzufügen (Trim())

<input type="Text" value="#ToString(Trim(convertToNumber(separator, separatorNumber[separator])))#"> 

es noch zusätzlichen Leerraum

danke

Antwort

13

Haben Sie versucht, output="false" zu Ihrem Funktionstag hinzuzufügen?

<cffunction name="convertToNumber" returntype="numeric" output="false">...</cffunction> 

Hoffe, dass hilft.

+0

Ciarán Archer: Danke für die Antwort. es funktioniert: D – tsurahman

+0

Yap, es funktioniert. Ich vergesse, >> output = "false" << zu setzen. – ppshein

+1

Andere Dinge, die Sie untersuchen möchten, sind cfsetting (das enablecfoutputonly-Attribut) und die Einstellung für die Unterdrückung von Leerzeichen im ColdFusion-Administrator. –

0

Es ist sehr einfach . Setzen Sie <cfsilent> in Ihre <cffunction>. Sie müssen <cfsilent> nach <cfargument> eingeben.

Ich habe über zusätzlichen Speicherplatz innerhalb cffunction in meinem Blog geschrieben.

<cffunction name="convertToNumber" returntype="numeric"> 
    <cfargument name="separator" required="Yes" type="string" /> 
    <cfargument name="number" required="Yes" type="string" /> 
    <cfsilent> 
     <cfset LOCAL.arrSeparator = ["comma", "period", "lakh_crore"] /> 
     <cfif ARGUMENTS.separator eq "comma" or ARGUMENTS.separator eq "lakh_crore"> 
      <cfif ListLen(ARGUMENTS.number, ".") eq 2> 
       <cfset LOCAL.integral = ListFirst(ARGUMENTS.number, ".") /> 
       <cfset LOCAL.fractional = ListLast(ARGUMENTS.number, ".") /> 
      <cfelse> 
       <cfset LOCAL.integral = ARGUMENTS.number /> 
       <cfset LOCAL.fractional = "" /> 
      </cfif> 
      <cfset LOCAL.integral = Replace(LOCAL.integral, ",", "", "ALL") /> 
      <cfset LOCAL.returnValue = LOCAL.integral /> 
      <cfif Len(Trim(LOCAL.fractional))> 
       <cfset LOCAL.returnValue &= "." & LOCAL.fractional /> 
      </cfif> 
     </cfif> 
     <cfif ARGUMENTS.separator eq "period"> 
      <cfif ListLen(ARGUMENTS.number, ",") eq 2> 
       <cfset LOCAL.integral = ListFirst(ARGUMENTS.number, ",") /> 
       <cfset LOCAL.fractional = ListLast(ARGUMENTS.number, ",") /> 
      <cfelse> 
       <cfset LOCAL.integral = ARGUMENTS.number /> 
       <cfset LOCAL.fractional = "" /> 
      </cfif> 
      <cfset LOCAL.integral = Replace(LOCAL.integral, ".", "", "ALL") /> 
      <cfset LOCAL.returnValue = LOCAL.integral /> 
      <cfif Len(Trim(LOCAL.fractional))> 
       <cfset LOCAL.returnValue &= "." & LOCAL.fractional /> 
      </cfif> 
     </cfif> 
     <cfreturn LOCAL.returnValue /> 
    </cfsilent> 
</cffunction> 

<cfset separatorNumber = StructNew() /> 
<cfset separatorNumber.comma = "1,234,567,890.123456" /> 
<cfset separatorNumber.period = "1.234.567.890,123456" /> 
<cfset separatorNumber.lakh_crore = "1,23,45,67,890.123456" /> 
<cfoutput> 
    <cfloop collection="#separatorNumber#" item="separator"> 
     <p> 
      #separator# : 
      <input type="Text" value="#convertToNumber(separator, separatorNumber[separator])#"> 
      Length : #Len(convertToNumber(separator, separatorNumber[separator]))# 
     </p> 
    </cfloop> 
</cfoutput> 
+0

ppshein: danke für die antwort, die weißen platz noch da – tsurahman

+0

Dude .. !! Weil du nicht getan hast, was ich gesagt habe. Fassen Sie meine obige Codierung. Ich habe bearbeitet als in wie ich schon sagte. Fassen Sie es. – ppshein

1

Ich stieß auf ein ähnliches Problem, und was für mich funktionierte, war, den von der Methode zurückgegebenen Wert in eine Variable zu setzen und dann die Variable anstelle der Rückgabe von der Methode auszugeben. Ich habe es überhaupt nicht formatiert, aber irgendwie hat das geholfen.

Verwandte Themen