JoDee

06-25-2009, 03:07 PM

I'm in the process of creating an Acrobat PDF form. I am trying to calculate a text field to round up, a 5 decimal point number, to the nearest 1/16". Does anyone have any idea how to write the javascript code for this?

View Full Version : javascript problem

JoDee

06-25-2009, 03:07 PM

I'm in the process of creating an Acrobat PDF form. I am trying to calculate a text field to round up, a 5 decimal point number, to the nearest 1/16". Does anyone have any idea how to write the javascript code for this?

pstuart

06-25-2009, 04:20 PM

Well, javascript is horrible at math, first of all.

Javascript does math as binary calculations. just try to divide 7/5 and tell me what you get.

The best I can suggest is create an array or hash of the decimal values of all 1/16th values.

Split your math number into left and right sides of the decimal point and evaluate the right side where the number falls within the 1/16th segments and then just use the next value up.

switch statements can be very helpful in this case, rather then nesting a whole bunch of if statements.

Good luck.

Javascript does math as binary calculations. just try to divide 7/5 and tell me what you get.

The best I can suggest is create an array or hash of the decimal values of all 1/16th values.

Split your math number into left and right sides of the decimal point and evaluate the right side where the number falls within the 1/16th segments and then just use the next value up.

switch statements can be very helpful in this case, rather then nesting a whole bunch of if statements.

Good luck.

JoDee

06-29-2009, 01:26 PM

Thank you for the advice. However, my larger problem now, seems to be my lack of javascript know how. I can get throught the basics, but struggle with anything more advanced.

I've been searching the internet, and the only thing that I have found, at this point, is the conversion of decimal to feet and inches. Not exactly what I was hoping for. I was thinking that I could somehow use some of this code, but I do not understand all of the information within it.

I've been searching the internet, and the only thing that I have found, at this point, is the conversion of decimal to feet and inches. Not exactly what I was hoping for. I was thinking that I could somehow use some of this code, but I do not understand all of the information within it.

pstuart

06-29-2009, 03:36 PM

Well,

Without doing the work for you...

If you think about it for a sec. There are only 16 numbers you need to deal with

0/16 = 0

1/16 = .0625

2/16 = .125

3/16 = .1875

4/16 = .25

5/16 = .3125

6/16 = .375

7/16 = .4375

8/16 = .5

9/16 = .5625

10/16 = .625

11/16 = .6875

12/16 = .75

13/16 = .8125

14/16 = .875

15/16 = .9375

16/16 = 1

So if you have a number 0.34567

split the number into left and right side values (0 and .34567)

you just have to find where it falls and then use the larger value. since .34567 is greater than 5/16 and less than 6/16 you would use 6/16 or return 0.375

if you have 2.98765

(split the number into left and right side values (2 and .98765)

.98765 would be greater than 15/16 and less than 1 so you would return 3

Just translate that into a simple javascript function and you should be able to round up anything to the nearest 1/16th of an inch.

to get you started:

function double roundUp(double val)

{

//Split val

var tempVal= val + ""; // cast to a string :)

var tempValArry= tempVal.split("."); // split into array by the .

var leftside = parseFloat(tempValArry[0]); // leftside value

var rightside= parseFloat(tempValArry[1]); // rightside value

// nested shorthand if statement could use if then else as well.

var rtnVal =

(rightside<0) ? 0 :

(rightside<0.0625) ? .0625 :

...;

if (rtnVal == 1)

{

rtnVal = leftside + rtnVal;

}

return rtnVal;

}

Hope that helps... No guarantees the above code would even work... Just a thought starter. I am sure there are much better ways to do what you want to do.

Without doing the work for you...

If you think about it for a sec. There are only 16 numbers you need to deal with

0/16 = 0

1/16 = .0625

2/16 = .125

3/16 = .1875

4/16 = .25

5/16 = .3125

6/16 = .375

7/16 = .4375

8/16 = .5

9/16 = .5625

10/16 = .625

11/16 = .6875

12/16 = .75

13/16 = .8125

14/16 = .875

15/16 = .9375

16/16 = 1

So if you have a number 0.34567

split the number into left and right side values (0 and .34567)

you just have to find where it falls and then use the larger value. since .34567 is greater than 5/16 and less than 6/16 you would use 6/16 or return 0.375

if you have 2.98765

(split the number into left and right side values (2 and .98765)

.98765 would be greater than 15/16 and less than 1 so you would return 3

Just translate that into a simple javascript function and you should be able to round up anything to the nearest 1/16th of an inch.

to get you started:

function double roundUp(double val)

{

//Split val

var tempVal= val + ""; // cast to a string :)

var tempValArry= tempVal.split("."); // split into array by the .

var leftside = parseFloat(tempValArry[0]); // leftside value

var rightside= parseFloat(tempValArry[1]); // rightside value

// nested shorthand if statement could use if then else as well.

var rtnVal =

(rightside<0) ? 0 :

(rightside<0.0625) ? .0625 :

...;

if (rtnVal == 1)

{

rtnVal = leftside + rtnVal;

}

return rtnVal;

}

Hope that helps... No guarantees the above code would even work... Just a thought starter. I am sure there are much better ways to do what you want to do.

JoDee

06-29-2009, 05:45 PM

Thank you VERY much.

I was able to figure out how to round up to the nearest 1/16" before your post. Now I'm just waiting for the "powers that be" to make a decision as to whether to round up or off to the nearest 1/16". If I need to round off to the nearest 1/16" I can use the information that you have supplied as a baseline.

Thanks again,

JoDee

I was able to figure out how to round up to the nearest 1/16" before your post. Now I'm just waiting for the "powers that be" to make a decision as to whether to round up or off to the nearest 1/16". If I need to round off to the nearest 1/16" I can use the information that you have supplied as a baseline.

Thanks again,

JoDee

vBulletin® v3.7.2, Copyright ©2000-2018, Jelsoft Enterprises Ltd.