Currency: Difference between revisions
Content added Content deleted
m (→{{header|Ruby}}: Updated output) |
(Added AppleScript.) |
||
Line 110: | Line 110: | ||
total: 23683000000000006.16 |
total: 23683000000000006.16 |
||
</pre> |
</pre> |
||
=={{header|AppleScript}}== |
|||
The AppleScript core language doesn't recognise currency values specifically and its numbers don't have the precision required for this task, but through ASObjC, it's able to use Foundation classes which do. |
|||
<lang applescript>use AppleScript version "2.4" -- OS X 10.10 (Yosemite) or later |
|||
use framework "Foundation" |
|||
-- Derive an NSDecimalNumber from an AppleScript number or numeric text. |
|||
-- NSDecimalNumbers also allow arithmetic and have a far greater range than AS numbers. |
|||
on decimalNumberFrom(n) |
|||
return current application's class "NSDecimalNumber"'s decimalNumberWithString:(n as text) |
|||
end decimalNumberFrom |
|||
-- Multiply two NSDecimalNumbers. |
|||
on multiply(dn1, dn2) |
|||
return dn1's decimalNumberByMultiplyingBy:(dn2) |
|||
end multiply |
|||
-- Add two NSDecimalNumbers. |
|||
on add(dn1, dn2) |
|||
return dn1's decimalNumberByAdding:(dn2) |
|||
end add |
|||
on billTotal(quantitiesAndPrices, taxRate, currencySymbol) |
|||
-- Set up an NSNumberFormatter for converting between currency strings and NSDecimalNumbers. |
|||
set currencyFormatter to current application's class "NSNumberFormatter"'s new() |
|||
tell currencyFormatter to setNumberStyle:(current application's NSNumberFormatterCurrencyStyle) |
|||
tell currencyFormatter to setCurrencySymbol:(currencySymbol) |
|||
tell currencyFormatter to setGeneratesDecimalNumbers:(true) |
|||
-- Tot up the bill from the list of quantities (numbers or numeric strings) and unit prices (currency strings with symbols). |
|||
set subtotal to decimalNumberFrom(0) -- or: current application's class "NSDecimalNumber"'s zero() |
|||
repeat with thisEntry in quantitiesAndPrices |
|||
set {quantity:quantity, unitPrice:unitPrice} to thisEntry |
|||
set entryTotal to multiply(decimalNumberFrom(quantity), currencyFormatter's numberFromString:(unitPrice)) |
|||
set subtotal to add(subtotal, entryTotal) |
|||
end repeat |
|||
-- Work out the tax and add it to the subtotal. |
|||
set tax to multiply(subtotal, decimalNumberFrom(taxRate / 100)) |
|||
set total to add(subtotal, tax) |
|||
-- Format and return the results. |
|||
return (current application's class "NSString"'s stringWithFormat_("Subtotal: %@ |
|||
Tax: %@ |
|||
Total: %@", ¬ |
|||
currencyFormatter's stringFromNumber:(subtotal), ¬ |
|||
currencyFormatter's stringFromNumber:(tax), ¬ |
|||
currencyFormatter's stringFromNumber:(total))) ¬ |
|||
as text |
|||
end billTotal |
|||
-- Demo code: |
|||
set currencySymbol to "$" |
|||
set quantitiesAndPrices to {{quantity:"4000000000000000", unitPrice:currencySymbol & "5.50"}, ¬ |
|||
{quantity:2, unitPrice:currencySymbol & 2.86}} |
|||
set taxRate to 7.65 |
|||
return billTotal(quantitiesAndPrices, taxRate, currencySymbol)</lang> |
|||
{{output}} |
|||
<lang applescript>"Subtotal: $22,000,000,000,000,005.72 |
|||
Tax: $1,683,000,000,000,000.44 |
|||
Total: $23,683,000,000,000,006.16"</lang> |
|||
=={{header|AWK}}== |
=={{header|AWK}}== |