sorout Posted September 7, 2014 Share Posted September 7, 2014 Hi, I need help. (for those who don't know how does Indian Numbering System work.. the basic idea is this: 10,00,00,000... first comma comes after three zeros which is a thousand and then after two zeros.. so there is no Hundred Thousand, a hundred thousand is called One Lakh... for more details, please read the wiki article on "Indian Numbering System") I managed to look around on internet and found myself a code which suited my need which was to convert a Number into Words with indian numbering sytem in a PDF form. It worked greatly until one day when I encountered a strange problem: After a particular calculation which gives the result 170080.00 and when I convert it to words.. the following conversion happens: "One Lakh Seventy Thousand and Seventy-Nine Rupees and One Hundred Paise Only"... instead of "One Lakh Seventy Thousand and Eighty Rupees only" (Actual result was 170080.27, from which I substracted 0.27 to round it off to 170080.00) =========== code is: function number2text(value) { var fraction = Math.round(frac(value)*100); var f_text = ""; if(fraction == 1) { f_text = " and "+convert_number(fraction)+" Paisa"; } if(fraction > 1) { f_text = " and "+convert_number(fraction)+" Paise"; } if (Math.floor(value) == 1) { return convert_number(value)+" Rupee"+f_text+" Only"; } else { return convert_number(value)+" Rupees"+f_text+" Only"; } } function frac(f) { return f % 1; } function convert_number(number) { if ((number < 0) || (number > 999999999)) { return "NUMBER TOO LARGE TO CONVERT!"; } var Gn = Math.floor(number / 10000000); /* Crore */ number -= Gn * 10000000; var kn = Math.floor(number / 100000); /* lakhs */ number -= kn * 100000; var Hn = Math.floor(number / 1000); /* thousand */ number -= Hn * 1000; var Dn = Math.floor(number / 100); /* Tens (deca) */ number = number % 100; /* Ones */ var tn= Math.floor(number / 10); var one=Math.floor(number % 10); var res = ""; if (Gn>0) { res += (convert_number(Gn) + " Crore"); } if (kn>0) { res += (((res=="") ? "" : " ") + convert_number(kn) + " Lakh"); } if (Hn>0) { res += (((res=="") ? "" : " ") + convert_number(Hn) + " Thousand"); } if (Dn) { res += (((res=="") ? "" : " ") + convert_number(Dn) + " Hundred"); } var ones = Array("", "One", "Two", "Three", "Four", "Five", "Six","Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen","Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen","Nineteen"); var tens = Array("", "", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty","Seventy", "Eighty", "Ninety"); if (tn>0 || one>0) { if (!(res=="")) { res += " and "; } if (tn < 2) { res += ones[tn * 10 + one]; } else { res += tens[tn]; if (one>0) { res += ("-" + ones[one]); } } } if (res=="") { res = "Zero"; } return res; } ========================= Thanks! Link to comment Share on other sites More sharing options...
justsomeguy Posted September 8, 2014 Share Posted September 8, 2014 That's just a rounding error. If you want to round a number you should use something like Math.round or Math.floor. Link to comment Share on other sites More sharing options...
srinivas g Posted September 9, 2014 Share Posted September 9, 2014 better use Math.round instead of Math.floor. Link to comment Share on other sites More sharing options...
sorout Posted September 9, 2014 Author Share Posted September 9, 2014 Thanks guys! I used the Math.round(var*100)/100; to round the final number off to two decimals and it worked... Although I have to say I was really thrown off by Acrobat's ability to handle javascript code, somehow having line breaks in the code was giving me very unexpected results... (I'm using their latest one which comes with the Creative Cloud) Until now, I was using toFixed(2) which wasn't working for me.. anyway, now things are working fine... Thanks again, good day!!! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now