Coder Social home page Coder Social logo

mjunaidi / bigdecimal.js Goto Github PK

View Code? Open in Web Editor NEW

This project forked from iriscouch/bigdecimal.js

0.0 2.0 0.0 3.64 MB

Arbitrary-precision Javascript BigInteger and BigDecimal real numbers

License: Apache License 2.0

HTML 55.71% Java 7.98% CSS 1.93% JavaScript 14.51% Ruby 19.87%

bigdecimal.js's Introduction

BigDecimal for Javascript

BigDecimal for Javascript is a pure-Javascript implementation of immutable, arbitrary-precision, signed decimal numbers. BigDecimal supports decimal math with arbitrary precision.

For a limited time, we will throw in BigInteger support at no extra charge!

Purpose

If this is a problem for you:

node> 0.1 + 0.2
0.30000000000000004

Then you need BigDecimal for Javascript. BigDecimal is great for arithmetic of financial information, or anything exceeding the Javascript Number (IEEE-754 float) type. Decimal did not make the cut in the new ECMAScript standards so it’s time we got our act together.

Usage

BigDecimal works in the browser and in Apache CouchDB. See the simple BigDecimal Couch app demo to compare server-side and client-side expression evaluation.

BigDecimal is available in the NPM repository for NodeJS.

npm install bigdecimal

Now use it normally. It is exactly like the Java 1.5 BigInteger and BigDecimal API. See the BigDecimal documentation for information.

var bigdecimal = require("bigdecimal");

var i = new bigdecimal.BigInteger("1234567890abcdefghijklmn", 24);
console.log("i is " + i);
// Output: i is 60509751690538858612029415201127

var d = new bigdecimal.BigDecimal(i);
var x = new bigdecimal.BigDecimal("123456.123456789012345678901234567890");
console.log("d * x = " + d.multiply(x));
// Output: d * x = 7470299375046812977089832214047022056.555930270554343863089286012030

var two = new bigdecimal.BigDecimal('2');
console.log("Average = " + d.add(x).divide(two));
// Output: Average = 30254875845269429306014707662291.561728394506172839450617283945

var down = bigdecimal.RoundingMode.DOWN();
console.log("d / x (25 decimal places) = " + d.divide(x, 25, DOWN));
// Output: d / x (25 decimal places) = 490131635404200348624039911.8662623025579331926181155

There is also a command-line REPL tool for experimentation, bigdecimal.js if you install with the -g switch, or ./node_modules/.bin/bigdecimal.js otherwise. The bigdecimal module is already loaded, also available as BD for convenience.

bigdecimal.js
BigDec> d = new BD.BigDecimal("123456.123456789012345678901234567890")

Implementation

This code is compiled Javascript, originating from the Google GWT project. GWT version 2.1 supports the Java BigDecimal class. The implementation came from the Apache Harmony project by way of gwt-java-math which optimized it for the Javascript compiler.

Compiled Javascript is a problem; however that is offset by these benefits:

  • The implementation is mature, optimized, and maintained by Apache and Google
  • The API is well-known, compatible with the J2SE BigDecimal and BigInteger class

If you can’t stand the idea of running machine-generated code, please implement BigInteger and BigDecimal in native Javascript; convince the world your implementation is trustworthy, reasonably bug-free, and sure to be maintained for several years and I will glady include it in this project.

Builds

Ready-to-use Javascript builds are available in the tagged Git revisions. Click the Download Source button at the top and choose a vX.Y tag. The built code will be in lib/bigdecimal.js.

To build BigDecimal yourself from source, follow these steps:

  1. Download the GWT SDK, version 2.4.0. Extract it in this checkout, as gwt-2.4.0/
  2. Get Apache Ant if you don't have it (try just running ant at the command line). I just unpack it in this checkout and add $PWD/apche-ant-1.8.2/bin to my PATH.
  3. rake clean
  4. rake

As with the prebuilt download, the CommonJS module will be in lib/bigdecimal.js.

License

BigDecimal for Javascript is licensed under the Apache License, version 2.0.

bigdecimal.js's People

Contributors

jhs avatar ahansen1 avatar thatguy avatar

Watchers

mjunaidi avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.