


Hi,
I have text fields that are populated from XML data. The data can be text or numeric, so I have a script in the initialized event to display a pattern if the data is a number:
this.format.picture.value = "num{zz9.9999%}";
Some of the numbers do not round correctly and this is causing manual editing which is a lot of work as I have to proof 250+ fields. The point of automating these fields is to save time and effort. Is there a solution to my problem? I have found a few posts, but those solutions are not working for my situation - or at least I can't get it to work.
An example is a value of 0.0046875 and it should display as 0.4688%. Instead it is displaying as 0.4687%.
Solved! Go to Solution.
Views
Replies
Sign in to like this content
Total Likes
OMG - thank you soooo much - it works!
Views
Replies
Sign in to like this content
Total Likes
Hi,
your problem is that xx.yyyy5 is rounded down, xx.yyyy50001 is rounded up.
Try this approach for display in your initialize:
var content = parseFloat(this.rawValue);
if (!isNaN(content)) {
this.format.picture.value = "num{zz9.9999%}";
this.rawValue = content+0.000000001
}
0.0049995 will be rounded to 0.5000% as would 0.0049996
Views
Replies
Sign in to like this content
Total Likes
Thanks for your response, but this isn't working. It still doesn't round to 0.4688% and I tried your example 0.0049995 and it displays 0.4999.
Views
Replies
Sign in to like this content
Total Likes
Views
Replies
Sign in to like this content
Total Likes
You're facing a typical rounding issue of the IEEE 754 standard. You can bypass this by converting the dicimals into integers before rounding.
Keep in mind: The display pattern plays an important role when you're going to display percentage values.
So with the pattern num{zz9.9999%} the input have to be a value between 1 (= 100 %) and 0 (= 0 %). So a value of 0.0046875 = 0.4687 %
With a pattern num{zz9.9999 '%'} where the percentage symbol is quoted, the values are displayed this way. 0.0046875 = 0.0047 %
To get rid of the rounding issue multiply the input value by a factor that will convert all dicimal placed into an integer. Then round that integer and divide it by the factor again to recreate the initial decimal places.
$ = Round(NumField1 * 1000000) / 1000000
OMG - thank you soooo much - it works!
Views
Replies
Sign in to like this content
Total Likes