Appian Community
Site
Search
Sign In/Register
Site
Search
User
DISCUSS
LEARN
SUCCESS
SUPPORT
Documentation
AppMarket
More
Cancel
I'm looking for ...
State
Not Answered
Replies
3 replies
Subscribers
7 subscribers
Views
2459 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
AI and Rules
The existing ROUND() function should be resulting in rounding off the given deci
sureshkg
over 9 years ago
The existing ROUND() function should be resulting in rounding off the given decimal number based on the specified number of digits in the second parameter. It works perfectly fine if we store the value in the TEXT data type variable, But, if we store the value in the Decimal data type, it is not behaving as expected. May i know the reason behind this? Are there any work around ? or is it a known issue?
Ex. Round(10.223434, 2) = 10.22 -> stored in the Text Variable
Round(10.223434, 2) = 10.219999999999995 --> stored in the Decimal Variable.
TA
...
OriginalPostID-119683
OriginalPostID-119683
Discussion posts and replies are publicly visible
0
Eduardo Fuentes
Appian Employee
over 9 years ago
If you want to display the number wit the only those two digits; when displaying make sure you use the fixed() function.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
kumaraveln
over 9 years ago
We are facing a similar issue. For display purpose we can use FIXED() or any other function. But we need to save the decimal value (after rounding the scale to 2 digits) into a decimal type variable.
Code:
--------
a!floatingPointField(
label: "Current Ratio",
value: ri!agsTransactions_cdt.templateInfo.currentRatio,
saveInto: {
ri!agsTransactions_cdt.templateInfo.currentRatio << rule!BW_AGS_convertToDecimal(_)
}
)
Rule - BW_AGS_convertToDecimal
---------------------------------
= if(
or(
isnull(
ri!inp
),
todecimal(
ri!inp
) = 0
),
null,
todecimal(
fixed(
ri!inp,
2
)
)
)
Here ri!inp is of type Number(Decimal).
This is working fine when I enter something like 25.55 but when I enter something like 25.57888958988,
in the screen it is rounding the value and displaying 25.58 but my process variable shows 25.580000000000002.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
kumaraveln
over 9 years ago
Ok now I changed 2 things and it looks good so far.
1. Changed ri!inp type to ANY (this actually reversed the problem. if I enter 25.57889555 it worked fine but when I enter 25.1 and saved, process variable showed 25.100000000000001)
so I assumed the problem is with todecimal() function that I used to wrap FIXED(). I removed that wrapper and now both the case seems to work. But FIXED() returns a TEXT and its getting saved into a Number(Decimal) rule variable. But I dint get any error when saving into.
So can anyone suggest if its good to go with this.
Now my rule got changed into
= if(
or(
isnull(
ri!inp
),
todecimal(
ri!inp
) = 0
),
null,
fixed(
ri!inp,
2
)
)
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel