Questions related to Number to String conversion

Hi,

I need to pass via curl some “numeric” values that can contains decimal
So, the number 5.1 in Europe (dot is converted to comma) is converted by Applescript as 5,1 and the curl command fail

I found the standard addition command “localized text”

Seems that it works.

set a to 5.1
set b to localized string a

return “5.1”

First question is: it is recommended or not to use it?
Any other method to convert in string a decimal number preserving dot for pass in shell script?

Second question is:

Big numbers (like bytes of a big file) once gutted, are converted as scientific notation
I found the number to text routine
http://www.macosxautomation.com/applescript/sbrt/sbrt-02.html

But on Mountain Lion trying to convert number 1234567890 → 1.23456789E+9 return me “1,2345678”
Seems in error. Any workaround or unique routine to solve both problem?

Ame

Hi,

I modified the script for European users that need to convert number with decimal or number expressed as scientific notation.
I modified the line with set y to the offset of…
This is useful for pass data to curl and populate DB with number that require decimal expressed with dot.
I also added the case when number has only decimal.
Anyway the command localized text seems work good.

on number_to_string(this_number)
	set this_number to this_number as string
	if this_number contains "E+" then
		set x to the offset of "," in this_number
		set y to the offset of "+" in this_number
		set z to the offset of "E" in this_number
		set the decimal_adjust to characters (y - (length of this_number)) thru -1 of this_number as string as number
		if x is not 0 then
			set the first_part to characters 1 thru (x - 1) of this_number as string
		else
			set the first_part to ""
		end if
		set the second_part to characters (x + 1) thru (z - 1) of this_number as string
		set the converted_number to the first_part
		repeat with i from 1 to the decimal_adjust
			try
				set the converted_number to the converted_number & character i of the second_part
			on error
				set the converted_number to the converted_number & "0"
			end try
		end repeat
		return the converted_number
	else if this_number contains "," then
		set AppleScript's text item delimiters to ","
		set arrayObjects to text items of this_number
		set AppleScript's text item delimiters to "."
		set this_number to arrayObjects as string
		set AppleScript's text item delimiters to ""
		return this_number
	else
		return this_number
	end if
end number_to_string

do this

on convertNumberToString(n)
“php -r 'echo sprintf("%d","” & n & “");'”
do shell script result
return result
end convertNumberToString

cheers :wink:

Hopefully I’m understanding you correctly, and that you want to convert an AppleScript number into a string that uses a dot as its decimal separator, and converts scientific notation into full decimal notation.

I posted this trick very recently to another post on this forum, and one of the complaints cited was that it didn’t use localised decimal separators, only “.”. In your case, this sounds like it would be an advantage.

It also has the benefit of expanding scientific notation into full decimal notation, handling numbers up to the order of 10¹⁶ in magnitude (beyond which the result will remain expressed in scientific notation).

set n to n as yards as string

where n is your input number that needs converted into string format.

Output:

5.1 --> "5.1"
1.23456789E+9 --> ""1234567890"