Hi,

The idea of my script is to increase prices in a Quark document by the requested percentage increase, I managed to get the script to work except for rounding the number to the required 2 decimal places, after some research I discovered the round truncate and number to string handlers which I have included in my script. Here is the script:

```
--Number to string handler
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
return this_number
end if
end number_to_string
--Round truncate handler
on round_truncate(this_number, decimal_places)
if decimal_places is 0 then
set this_number to this_number + 0.5
return number_to_text(this_number div 1)
end if
set the rounding_value to "5"
repeat decimal_places times
set the rounding_value to "0" & the rounding_value
end repeat
set the rounding_value to ("." & the rounding_value) as number
set this_number to this_number + rounding_value
set the mod_value to "1"
repeat decimal_places - 1 times
set the mod_value to "0" & the mod_value
end repeat
set the mod_value to ("." & the mod_value) as number
set second_part to (this_number mod 1) div the mod_value
if the length of (the second_part as text) is less than the decimal_places then
repeat decimal_places - (the length of (the second_part as text)) times
set second_part to ("0" & second_part) as string
end repeat
end if
set first_part to this_number div 1
set first_part to number_to_string(first_part)
set this_number to (first_part & "." & second_part)
return this_number
end round_truncate
--Request percentage increase, retrieve number from Quark text box and apply increase
property the_choice : 10
tell application "QuarkXPress"
set thePercentage to (display dialog "What percentage increase do you wish to apply" buttons {"Cancel", "OK"} default button "OK" default answer the_choice)
if button returned of thePercentage is "Cancel" then error "User canceled." number -128
set the_choice to the text returned of the thePercentage
set the_choice to (the_choice / 100 + 1)
tell current box of document 1
try
set ToChange to last word
set Changed to (ToChange * the_choice)
end try
end tell
end tell
--Round the number to 2 decimal places
round_truncate(Changed, 2)
--Return rounded number to Quark and update text box
tell application "QuarkXPress"
tell current box of document 1
set the last word to Changed
end tell
end tell
```

When the script is run without attempting to return the number to Quark I get the correct number displayed in the results box of applescript editor rounded to 2 decimal places. As soon as I include the return number to Quark and update text box part of my script, the number displayed in the text box within quark has been calculated correctly but hasn’t been rounded to the 2 decimal places. Any help with this would be much appreciated.