Seeing a strange issue with a Velocity script and am hoping someone can save my sanity.
I'm looping over a custom object and extracting values to pull into the email.
There's a currency field in salesforce called Amount__c that seems to just remove trailing 0s after a decimal when Marketo reads the value.
Example of variable being set:
#set( $regRefundAmount = "${esc.d}${Automated_Fee_Reimbursement__c.Amount__c}" )
Example Test #1
402.76 turns into:
$402.76
Velocity Output for custom object values:
{Address_Change_Expiration_Date__c=2019-09-17, Amount__c=402.76}
Example Test #2
11.40 turns into:
$11.4
Velocity Output for custom object values:
{Address_Change_Expiration_Date__c=2019-09-17, Amount__c=11.4}
Example Test #3:
60.00 turns into:
$60
Velocity Output for custom object values:
{Address_Change_Expiration_Date__c=2019-09-17, Amount__c=60}
If I go to SalesForce it will show $11.40 and $60.00 opposed to what the velocity output is showing (?)
Any ideas?
Solved! Go to Solution.
Not too weird really, floats don't have a fixed number of decimal points to display. Once they get stringified (= display-ified) they're going to keep the shortest possible representation. To display as USD currency with 2 decimals, pass the field to
$number.currency()
Not too weird really, floats don't have a fixed number of decimal points to display. Once they get stringified (= display-ified) they're going to keep the shortest possible representation. To display as USD currency with 2 decimals, pass the field to
$number.currency()
Yeah, that worked.
#set( $regRefundAmount = $number.currency($Automated_Fee_Reimbursement__c.Amount__c) )
The output of the object had me a little confused as to what was going on: {Address_Change_Expiration_Date__c=2019-09-17, Amount__c=11.4}
Makes sense now. Big thanks!
Yeah, a basic object dump is still calling toString() on every property.
The only way the dump would format as currency (padded to 2 decimal places at all times) would be of the property were not a standard Float/Integer, but rather a subclass that overrode toString().
Also: ritual reminder to never use floats to store money values (too late now!).