2010-08-10 6 views
6

У меня есть функция, чтобы преобразовать строку номерColdFusion странно дополнительное пространство

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

длина 17, но во входном тексте добавить дополнительный пробел в первый символ. Я действительно не знаю, как удалить лишние пробелы, и когда я добавляю ToString (Обрезка())

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

все еще есть дополнительное пустое пространство

спасибо

ответ

13

Вы пытались добавить output="false" в свой тег функции?

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

Надеюсь, что это поможет.

+0

Ciarán Archer: спасибо за ответ. это работы: D – tsurahman

+0

Yap, он работает. Я забыл поставить >> output = "false" <<. – ppshein

+1

Другие вещи, которые вы, возможно, захотите изучить, - это cfsetting (атрибут enablecfoutputonly) и параметр whitespace для подавления в администраторе ColdFusion. –

0

Это очень просто , Поместите <cfsilent> в ваш <cffunction>. Нужно поставить <cfsilent> после <cfargument>.

В своем блоге я писал о дополнительном пространстве внутри cffunction.

<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: спасибо, что ответ, пробел все еще там – tsurahman

+0

Dude .. !! Это из-за того, что ты не делал то, что я сказал. Возьмитесь за мое кодирование выше. Я отредактировал как ставя в , как я уже говорил. Возьми его. – ppshein

1

У меня возникла аналогичная проблема, и то, что сработало для меня, заключалось в том, чтобы вернуть значение, возвращаемое из метода, в переменную, а затем вывести переменную вместо возврата из метода. Я вообще не отформатировал его, но как-то это помогло.