Currency Input Field Rounding Issues with Decimal Values Above 10,000 (Ex.: 200,300.57) - Need Plugin Recommendation
I'm working on a custom currency input field component and facing a challenging issue with decimal value conversion and rounding when values exceed 10,000 (5+ digits).
Here's my current implementation:
a!localVariables(
a!textField(
label: ri!label,
labelPosition: a!defaultValue(ri!labelPosition, "ABOVE"),
value: a!currency(
isoCode: a!defaultValue(ri!isoCode, "BRL"),
value: rule!process_BRLInputSanitizer(
value: ri!value,
toDecimal: true,
showSeparators: false
),
decimalPlaces: 2,
showSeparators: true
),
placeholder: ri!placeholder,
saveInto: a!localVariables(
{
a!save(
ri!value,
a!currency(
isoCode: a!defaultValue(ri!isoCode, "BRL"),
value: rule!process_BRLInputSanitizer(
value: save!value,
toDecimal: true,
showSeparators: false
),
decimalPlaces: 2,
showSeparators: true
),
),
ri!saveInto
}
),
disabled: a!defaultValue(ri!disabled, false),
readOnly: a!defaultValue(ri!readOnly, false),
refreshAfter: "KEYPRESS",
validations: { ri!validations },
showWhen: a!defaultValue(ri!showWhen, true),
instructions: ri!instructions,
helpTooltip: ri!helpTooltip
)
)
Supporting Rule (process_BRLInputSanitizer):
a!localVariables(
local!toDecimal: a!defaultValue(ri!toDecimal, false),
local!value: tostring(ri!value),
local!left: substitute(local!value, ",", "."),
local!right: substitute(local!value, ".", ","),
local!result: if(
local!toDecimal,
concat(
left(local!right, len(local!right) - 3),
right(local!left, 3)
),
concat(
left(local!left, len(local!left) - 3),
right(local!right, 3)
)
),
if(
a!defaultValue(ri!showSeparators, true),
local!result,
if(
local!toDecimal,
substitute(local!result, ",", ""),
substitute(local!result, ".", "")
)
)
)Questions:
- Why does this rounding occur specifically when values exceed 5 digits?
- Is there an existing plugin or component that handles dynamic currency formatting (showing decimal separators while the user types) that maintains decimal precision?
- If such a plugin exists, it would save me from building this from scratch.
I'm essentially trying to create a currency input that displays proper formatting (R$323,845.27) while maintaining the underlying decimal value for record Type integration.
Any recommendations for existing solutions or insights into the rounding behavior would be greatly appreciated!
Thank you all for your time and assistance.
