Cold fluid weird extra space

I have a function to convert a string to a number

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

length is 17, but extra char is added to the input text first. I really don't know how to remove the extra space, and when I add ToString (Trim ())

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

he still has extra free space

Thank you

+6
coldfusion cfc
source share
3 answers

Have you tried adding output="false" to your function tag?

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

Hope this helps.

+13
source share

I had a similar problem, and for me it worked with returning the value returned from the method to a variable, and then outputting the variable instead of returning from the method. I did not format it at all, but somehow it helped.

+1
source share

It is very simple. Put <cfsilent> in <cffunction> . You need to put <cfsilent> after <cfargument> .

I wrote about extra space inside cblunction on my 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
source share

All Articles