 Level 1

0% to Level 2

Tip /

to gain points, level up, and earn exciting badges like the new
Mission!

View all

SOLVED

## Issue rounding numbers in a textfield  Level 4

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%.

1 Accepted Solution  Level 4

OMG - thank you soooo much - it works!

5 Replies  Employee

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  Level 4

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.  Employee  Level 10

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``    