js-big-decimal
Version:
Work with large numbers on the client side. Round them off to any required precision.
1 lines • 11.8 kB
JavaScript
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.bigDecimal=n():e.bigDecimal=n()}(global,(function(){return function(){"use strict";var e={165:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.abs=void 0,n.abs=function(e){return"number"!=typeof e&&"bigint"!=typeof e||(e=e.toString()),"-"==e[0]?e.substring(1):e}},217:function(e,n){function t(e){if(u(e))return e;for(var n="",t=e.length,r=e.split(".")[1],i=r?r.length:0,a=0;a<t;a++)e[a]>="0"&&e[a]<="9"?n+=9-parseInt(e[a]):n+=e[a];return o(n,i>0?"0."+new Array(i).join("0")+"1":"1")}function r(e){var n=e.split(".");for(n[0]||(n[0]="0");"0"==n[0][0]&&n[0].length>1;)n[0]=n[0].substring(1);return n[0]+(n[1]?"."+n[1]:"")}function i(e,n){var t=e.split("."),r=n.split("."),i=t[0].length,o=r[0].length;return i>o?r[0]=new Array(Math.abs(i-o)+1).join("0")+(r[0]?r[0]:""):t[0]=new Array(Math.abs(i-o)+1).join("0")+(t[0]?t[0]:""),i=t[1]?t[1].length:0,o=r[1]?r[1].length:0,(i||o)&&(i>o?r[1]=(r[1]?r[1]:"")+new Array(Math.abs(i-o)+1).join("0"):t[1]=(t[1]?t[1]:"")+new Array(Math.abs(i-o)+1).join("0")),[e=t[0]+(t[1]?"."+t[1]:""),n=r[0]+(r[1]?"."+r[1]:"")]}function o(e,n){var t;e=(t=i(e,n))[0],n=t[1];for(var r="",o=0,u=e.length-1;u>=0;u--)if("."!==e[u]){var a=parseInt(e[u])+parseInt(n[u])+o;r=a%10+r,o=Math.floor(a/10)}else r="."+r;return o?o.toString()+r:r}function u(e){return/^0[0]*[.]{0,1}[0]*$/.test(e)}Object.defineProperty(n,"__esModule",{value:!0}),n.pad=n.trim=n.add=void 0,n.add=function(e,n){var a;void 0===n&&(n="0");var s=0,d=-1;"-"==e[0]&&(u(e=e.substring(1))||(s++,d=1,e.length)),"-"==n[0]&&(u(n=n.substring(1))||(s++,d=2,n.length)),e=r(e),n=r(n),e=(a=i(r(e),r(n)))[0],n=a[1],1==s&&(1===d?e=t(e):2===d&&(n=t(n)));var l=o(e,n);return s?2==s?"-"+r(l):e.length<l.length?r(l.substring(1)):"-"+r(t(l)):r(l)},n.trim=r,n.pad=i},664:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.compareTo=void 0;var r=t(217),i=t(859);n.compareTo=function(e,n){var t,o,u=!1;if(t=[e,n].map((function(e){return(0,i.stripTrailingZero)(e)})),e=t[0],n=t[1],"-"==e[0]&&"-"!=n[0])return-1;if("-"!=e[0]&&"-"==n[0])return 1;if("-"==e[0]&&"-"==n[0]&&(e=e.substr(1),n=n.substr(1),u=!0),e=(o=(0,r.pad)(e,n))[0],n=o[1],0==e.localeCompare(n))return 0;for(var a=0;a<e.length;a++)if(e[a]!=n[a])return e[a]>n[a]?u?-1:1:u?1:-1;return 0}},415:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.divide=void 0;var r=t(217),i=t(350),o=t(916);n.divide=function(e,n,t,u){if(void 0===t&&(t=8),void 0===u&&(u=o.RoundingModes.HALF_EVEN),0==n)throw new Error("Cannot divide by 0");if(e=e.toString(),n=n.toString(),e=e.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),n=n.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),0==e)return"0";var a=0;"-"==n[0]&&(n=n.substring(1),a++),"-"==e[0]&&(e=e.substring(1),a++);var s=n.indexOf(".")>0?n.length-n.indexOf(".")-1:-1;if(n=(0,r.trim)(n.replace(".","")),s>=0){var d=e.indexOf(".")>0?e.length-e.indexOf(".")-1:-1;if(-1==d)e=(0,r.trim)(e+new Array(s+1).join("0"));else if(s>d)e=e.replace(".",""),e=(0,r.trim)(e+new Array(s-d+1).join("0"));else if(s<d){var l=(e=e.replace(".","")).length-d+s;e=(0,r.trim)(e.substring(0,l)+"."+e.substring(l))}else s==d&&(e=(0,r.trim)(e.replace(".","")))}var f=0,g=n.length,v="",p=e.indexOf(".")>-1&&e.indexOf(".")<g?e.substring(0,g+1):e.substring(0,g);if(e=e.indexOf(".")>-1&&e.indexOf(".")<g?e.substring(g+1):e.substring(g),p.indexOf(".")>-1){var c=p.length-p.indexOf(".")-1;g>(p=p.replace(".","")).length&&(c+=g-p.length,p+=new Array(g-p.length+1).join("0")),f=c,v="0."+new Array(c).join("0")}for(t+=2;f<=t;){for(var h=0;parseInt(p)>=parseInt(n);)p=(0,r.add)(p,"-"+n),h++;v+=h,e?("."==e[0]&&(v+=".",f++,e=e.substring(1)),p+=e.substring(0,1),e=e.substring(1)):(f||(v+="."),f++,p+="0")}return(1==a?"-":"")+(0,r.trim)((0,i.roundOff)(v,t-2,u))}},213:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.modulus=void 0;var r=t(415),i=t(350),o=t(182),u=t(26),a=t(916);function s(e){if(-1!=e.indexOf("."))throw new Error("Modulus of non-integers not supported")}n.modulus=function(e,n){if(0==n)throw new Error("Cannot divide by 0");e=e.toString(),n=n.toString(),s(e),s(n);var t="";return"-"==e[0]&&(t="-",e=e.substr(1)),"-"==n[0]&&(n=n.substr(1)),t+(0,u.subtract)(e,(0,o.multiply)(n,(0,i.roundOff)((0,r.divide)(e,n),0,a.RoundingModes.FLOOR)))}},182:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.multiply=void 0;var r=t(859);n.multiply=function(e,n){e=e.toString(),n=n.toString();var t=0;"-"==e[0]&&(t++,e=e.substr(1)),"-"==n[0]&&(t++,n=n.substr(1)),e=(0,r.stripTrailingZero)(e),n=(0,r.stripTrailingZero)(n);var i=0,o=0;-1!=e.indexOf(".")&&(i=e.length-e.indexOf(".")-1),-1!=n.indexOf(".")&&(o=n.length-n.indexOf(".")-1);var u=i+o;if(e=(0,r.stripTrailingZero)(e.replace(".","")),n=(0,r.stripTrailingZero)(n.replace(".","")),e.length<n.length){var a=e;e=n,n=a}if("0"==n)return"0";for(var s,d,l=n.length,f=0,g=[],v=l-1,p="",c=0;c<l;c++)g[c]=e.length-1;for(c=0;c<2*e.length;c++){for(var h=0,b=n.length-1;b>=v&&b>=0;b--)g[b]>-1&&g[b]<e.length&&(h+=parseInt(e[g[b]--])*parseInt(n[b]));h+=f,f=Math.floor(h/10),p=h%10+p,v--}return p=(0,r.stripTrailingZero)((s=p,0==(d=u)?s:(s=d>=s.length?new Array(d-s.length+1).join("0")+s:s).substr(0,s.length-d)+"."+s.substr(s.length-d,d))),1==t&&(p="-"+p),p}},350:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.roundOff=void 0;var r=t(916);function i(e,n,t,i){if(!e||e===new Array(e.length+1).join("0"))return!1;if(i===r.RoundingModes.DOWN||!t&&i===r.RoundingModes.FLOOR||t&&i===r.RoundingModes.CEILING)return!1;if(i===r.RoundingModes.UP||t&&i===r.RoundingModes.FLOOR||!t&&i===r.RoundingModes.CEILING)return!0;var o="5"+new Array(e.length).join("0");if(e>o)return!0;if(e<o)return!1;switch(i){case r.RoundingModes.HALF_DOWN:return!1;case r.RoundingModes.HALF_UP:return!0;case r.RoundingModes.HALF_EVEN:default:return parseInt(n[n.length-1])%2==1}}function o(e,n){void 0===n&&(n=0),n||(n=1),"number"==typeof e&&e.toString();for(var t="",r=e.length-1;r>=0;r--){var i=parseInt(e[r])+n;10==i?(n=1,i=0):n=0,t+=i}return n&&(t+=n),t.split("").reverse().join("")}n.roundOff=function e(n,t,u){if(void 0===t&&(t=0),void 0===u&&(u=r.RoundingModes.HALF_EVEN),u===r.RoundingModes.UNNECESSARY)throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");"number"!=typeof n&&"bigint"!=typeof n||(n=n.toString());var a=!1;"-"===n[0]&&(a=!0,n=n.substring(1));var s=n.split("."),d=s[0],l=s[1];if(t<0){if(t=-t,d.length<=t)return"0";var f=d.substr(0,d.length-t);return(a?"-":"")+(f=e(n=f+"."+d.substr(d.length-t)+l,0,u))+new Array(t+1).join("0")}if(0==t){d.length;return i(s[1],d,a,u)&&(d=o(d)),(a&&parseInt(d)?"-":"")+d}if(!s[1])return(a?"-":"")+d+"."+new Array(t+1).join("0");if(s[1].length<t)return(a?"-":"")+d+"."+s[1]+new Array(t-s[1].length+1).join("0");l=s[1].substring(0,t);var g=s[1].substring(t);return g&&i(g,l,a,u)&&(l=o(l)).length>t?(a?"-":"")+o(d,parseInt(l[0]))+"."+l.substring(1):(a&&(parseInt(d)||parseInt(l))?"-":"")+d+"."+l}},916:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.RoundingModes=void 0,function(e){e[e.CEILING=0]="CEILING",e[e.DOWN=1]="DOWN",e[e.FLOOR=2]="FLOOR",e[e.HALF_DOWN=3]="HALF_DOWN",e[e.HALF_EVEN=4]="HALF_EVEN",e[e.HALF_UP=5]="HALF_UP",e[e.UNNECESSARY=6]="UNNECESSARY",e[e.UP=7]="UP"}(n.RoundingModes||(n.RoundingModes={}))},859:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.stripTrailingZero=void 0,n.stripTrailingZero=function(e){var n="-"===e[0];for(n&&(e=e.substr(1));"0"==e[0];)e=e.substr(1);if(-1!=e.indexOf("."))for(;"0"==e[e.length-1];)e=e.substr(0,e.length-1);return""==e||"."==e?e="0":"."==e[e.length-1]&&(e=e.substr(0,e.length-1)),"."==e[0]&&(e="0"+e),n&&"0"!=e&&(e="-"+e),e}},26:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.negate=n.subtract=void 0;var r=t(217);function i(e){return e="-"==e[0]?e.substr(1):"-"+e}n.subtract=function(e,n){return e=e.toString(),n=i(n=n.toString()),(0,r.add)(e,n)},n.negate=i}},n={};function t(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={exports:{}};return e[r](o,o.exports,t),o.exports}var r={};return function(){var e=r;var n=t(217),i=t(165),o=t(350),u=t(182),a=t(415),s=t(213),d=t(664),l=t(26),f=t(916),g=t(859),v=function(){function e(n){void 0===n&&(n="0"),this.value=e.validate(n)}return e.validate=function(e){if(e){if(e=e.toString(),isNaN(e))throw Error("Parameter is not a number: "+e);"+"==e[0]&&(e=e.substring(1))}else e="0";if(e.startsWith(".")?e="0"+e:e.startsWith("-.")&&(e="-0"+e.substr(1)),/e/i.test(e)){var t=e.split(/[eE]/),r=t[0],i=t[1],o="";"-"==(r=(0,n.trim)(r))[0]&&(o="-",r=r.substring(1)),r.indexOf(".")>=0?(i=parseInt(i)+r.indexOf("."),r=r.replace(".","")):i=parseInt(i)+r.length,e=r.length<i?o+r+new Array(i-r.length+1).join("0"):r.length>=i&&i>0?o+(0,n.trim)(r.substring(0,i))+(r.length>i?"."+r.substring(i):""):o+"0."+new Array(1-i).join("0")+r}return e},e.prototype.getValue=function(){return this.value},e.prototype.setValue=function(n){this.value=e.validate(n)},e.getPrettyValue=function(n,t,r){void 0===t&&(t=3),void 0===r&&(r=",");var i="-"==(n=e.validate(n)).charAt(0);i&&(n=n.substring(1));for(var o=n.indexOf("."),u="",a=o=o>0?o:n.length;a>0;)a<t?(t=a,a=0):a-=t,u=n.substring(a,a+t)+(a<o-t&&a>=0?r:"")+u;return(i?"-":"")+u+n.substring(o)},e.prototype.getPrettyValue=function(n,t){return void 0===n&&(n=3),void 0===t&&(t=","),e.getPrettyValue(this.value,n,t)},e.round=function(n,t,r){if(void 0===t&&(t=0),void 0===r&&(r=f.RoundingModes.HALF_EVEN),n=e.validate(n),isNaN(t))throw Error("Precision is not a number: "+t);return(0,o.roundOff)(n,t,r)},e.prototype.round=function(n,t){if(void 0===n&&(n=0),void 0===t&&(t=f.RoundingModes.HALF_EVEN),isNaN(n))throw Error("Precision is not a number: "+n);return new e((0,o.roundOff)(this.value,n,t))},e.abs=function(n){return n=e.validate(n),(0,i.abs)(n)},e.prototype.abs=function(){return new e((0,i.abs)(this.value))},e.floor=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.FLOOR)},e.prototype.floor=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.FLOOR)},e.ceil=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.CEILING)},e.prototype.ceil=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.CEILING)},e.add=function(t,r){return t=e.validate(t),r=e.validate(r),(0,n.add)(t,r)},e.prototype.add=function(t){return new e((0,n.add)(this.value,t.getValue()))},e.subtract=function(n,t){return n=e.validate(n),t=e.validate(t),(0,l.subtract)(n,t)},e.prototype.subtract=function(n){return new e((0,l.subtract)(this.value,n.getValue()))},e.multiply=function(n,t){return n=e.validate(n),t=e.validate(t),(0,u.multiply)(n,t)},e.prototype.multiply=function(n){return new e((0,u.multiply)(this.value,n.getValue()))},e.divide=function(n,t,r,i){return n=e.validate(n),t=e.validate(t),(0,a.divide)(n,t,r,i)},e.prototype.divide=function(n,t,r){return new e((0,a.divide)(this.value,n.getValue(),t,r))},e.modulus=function(n,t){return n=e.validate(n),t=e.validate(t),(0,s.modulus)(n,t)},e.prototype.modulus=function(n){return new e((0,s.modulus)(this.value,n.getValue()))},e.compareTo=function(n,t){return n=e.validate(n),t=e.validate(t),(0,d.compareTo)(n,t)},e.prototype.compareTo=function(e){return(0,d.compareTo)(this.value,e.getValue())},e.negate=function(n){return n=e.validate(n),(0,l.negate)(n)},e.prototype.negate=function(){return new e((0,l.negate)(this.value))},e.stripTrailingZero=function(n){return n=e.validate(n),(0,g.stripTrailingZero)(n)},e.prototype.stripTrailingZero=function(){return new e((0,g.stripTrailingZero)(this.value))},e.RoundingModes=f.RoundingModes,e}();e.default=v}(),r=r.default}()}));