2010-08-10 16 views
6

que tiene una función para convertir cadenas a númerosColdFusion raro espacio adicional

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

la longitud es de 17, pero en el texto de entrada que añadir espacio en blanco adicional al primer carácter. Realmente no saber cómo eliminar el espacio en blanco extra, y cuando agrego ToString (Trim())

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

todavía tienen espacio en blanco adicional

gracias

Respuesta

13

¿Ha intentado añadido output="false" a su etiqueta de la función?

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

Espero que ayude.

+0

Ciarán Archer: gracias por responder. Es trabajos: D – tsurahman

+0

Yap, funciona. Me olvido de poner >> salida = "falso" <<. – ppshein

+1

Otras cosas que tal vez desee considerar son la configuración (el atributo enablecfoutputonly) y la configuración del espacio en blanco de supresión en el administrador de ColdFusion. –

0

Es muy simple . Ponga <cfsilent> en su <cffunction>. Necesita poner <cfsilent> después de <cfargument>.

He escrito sobre el espacio adicional dentro de la función en mi blog.

<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: gracias por su respuesta, el espacio en blanco sigue ahí – tsurahman

+0

Dude .. !! Es por tu culpa que no hiciste lo que te dije. Agarra mi codificación anterior. He editado como poner en como te dije antes. Captarlo. – ppshein

1

Me encontré con un problema similar, y lo que funcionó para mí fue poner el valor devuelto por el método en una variable y luego generar la variable en lugar del resultado del método. No lo formateé en absoluto, pero de alguna manera eso ayudó.

Cuestiones relacionadas