Skip to content

Commit

Permalink
Added rounding mode param to divide method (#135)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sword-of-GraySkull authored Jun 25, 2024
1 parent 5a47b16 commit efbe456
Show file tree
Hide file tree
Showing 13 changed files with 49 additions and 35 deletions.
6 changes: 3 additions & 3 deletions dist/esm/big-decimal.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { RoundingModes as Modes } from "./roundingModes";
import { RoundingModes as Modes, RoundingModes } from "./roundingModes";
declare class bigDecimal {
private value;
static RoundingModes: typeof Modes;
Expand All @@ -22,8 +22,8 @@ declare class bigDecimal {
subtract(number: bigDecimal): bigDecimal;
static multiply(number1: any, number2: any): string;
multiply(number: bigDecimal): bigDecimal;
static divide(number1: any, number2: any, precision?: number): string;
divide(number: bigDecimal, precision?: number): bigDecimal;
static divide(number1: any, number2: any, precision?: number, mode?: RoundingModes): string;
divide(number: bigDecimal, precision?: number, mode?: RoundingModes): bigDecimal;
static modulus(number1: any, number2: any): string;
modulus(number: bigDecimal): bigDecimal;
static compareTo(number1: any, number2: any): 0 | 1 | -1;
Expand Down
13 changes: 7 additions & 6 deletions dist/esm/big-decimal.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/esm/big-decimal.js.map

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion dist/esm/divide.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export declare function divide(dividend: any, divisor: any, precission?: number): string;
import { RoundingModes } from './roundingModes';
export declare function divide(dividend: any, divisor: any, precission?: number, mode?: RoundingModes): string;
6 changes: 3 additions & 3 deletions dist/node/big-decimal.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { RoundingModes as Modes } from "./roundingModes";
import { RoundingModes as Modes, RoundingModes } from "./roundingModes";
declare class bigDecimal {
private value;
static RoundingModes: typeof Modes;
Expand All @@ -22,8 +22,8 @@ declare class bigDecimal {
subtract(number: bigDecimal): bigDecimal;
static multiply(number1: any, number2: any): string;
multiply(number: bigDecimal): bigDecimal;
static divide(number1: any, number2: any, precision?: number): string;
divide(number: bigDecimal, precision?: number): bigDecimal;
static divide(number1: any, number2: any, precision?: number, mode?: RoundingModes): string;
divide(number: bigDecimal, precision?: number, mode?: RoundingModes): bigDecimal;
static modulus(number1: any, number2: any): string;
modulus(number: bigDecimal): bigDecimal;
static compareTo(number1: any, number2: any): 0 | 1 | -1;
Expand Down
14 changes: 8 additions & 6 deletions dist/node/js-big-decimal.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.divide = void 0;
var add_1 = __webpack_require__(217);
var round_1 = __webpack_require__(350);
function divide(dividend, divisor, precission) {
var roundingModes_1 = __webpack_require__(916);
function divide(dividend, divisor, precission, mode) {
if (precission === void 0) { precission = 8; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
if (divisor == 0) {
throw new Error('Cannot divide by 0');
}
Expand Down Expand Up @@ -304,7 +306,7 @@ function divide(dividend, divisor, precission) {
dividend = dividend.substring(1);
}
}
return ((neg == 1) ? '-' : '') + (0, add_1.trim)((0, round_1.roundOff)(quotent, precission - 2));
return ((neg == 1) ? '-' : '') + (0, add_1.trim)((0, round_1.roundOff)(quotent, precission - 2, mode));
}
exports.divide = divide;

Expand Down Expand Up @@ -878,13 +880,13 @@ var bigDecimal = /** @class */ (function () {
bigDecimal.prototype.multiply = function (number) {
return new bigDecimal((0, multiply_1.multiply)(this.value, number.getValue()));
};
bigDecimal.divide = function (number1, number2, precision) {
bigDecimal.divide = function (number1, number2, precision, mode) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, divide_1.divide)(number1, number2, precision);
return (0, divide_1.divide)(number1, number2, precision, mode);
};
bigDecimal.prototype.divide = function (number, precision) {
return new bigDecimal((0, divide_1.divide)(this.value, number.getValue(), precision));
bigDecimal.prototype.divide = function (number, precision, mode) {
return new bigDecimal((0, divide_1.divide)(this.value, number.getValue(), precision, mode));
};
bigDecimal.modulus = function (number1, number2) {
number1 = bigDecimal.validate(number1);
Expand Down
2 changes: 1 addition & 1 deletion dist/node/js-big-decimal.min.js

Large diffs are not rendered by default.

14 changes: 8 additions & 6 deletions dist/web/js-big-decimal.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.divide = void 0;
var add_1 = __webpack_require__(217);
var round_1 = __webpack_require__(350);
function divide(dividend, divisor, precission) {
var roundingModes_1 = __webpack_require__(916);
function divide(dividend, divisor, precission, mode) {
if (precission === void 0) { precission = 8; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
if (divisor == 0) {
throw new Error('Cannot divide by 0');
}
Expand Down Expand Up @@ -295,7 +297,7 @@ function divide(dividend, divisor, precission) {
dividend = dividend.substring(1);
}
}
return ((neg == 1) ? '-' : '') + (0, add_1.trim)((0, round_1.roundOff)(quotent, precission - 2));
return ((neg == 1) ? '-' : '') + (0, add_1.trim)((0, round_1.roundOff)(quotent, precission - 2, mode));
}
exports.divide = divide;

Expand Down Expand Up @@ -869,13 +871,13 @@ var bigDecimal = /** @class */ (function () {
bigDecimal.prototype.multiply = function (number) {
return new bigDecimal((0, multiply_1.multiply)(this.value, number.getValue()));
};
bigDecimal.divide = function (number1, number2, precision) {
bigDecimal.divide = function (number1, number2, precision, mode) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, divide_1.divide)(number1, number2, precision);
return (0, divide_1.divide)(number1, number2, precision, mode);
};
bigDecimal.prototype.divide = function (number, precision) {
return new bigDecimal((0, divide_1.divide)(this.value, number.getValue(), precision));
bigDecimal.prototype.divide = function (number, precision, mode) {
return new bigDecimal((0, divide_1.divide)(this.value, number.getValue(), precision, mode));
};
bigDecimal.modulus = function (number1, number2) {
number1 = bigDecimal.validate(number1);
Expand Down
2 changes: 1 addition & 1 deletion dist/web/js-big-decimal.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "js-big-decimal",
"version": "2.0.7",
"version": "2.0.8",
"description": "Work with large numbers on the client side. Round them off to any required precision.",
"main": "dist/node/js-big-decimal",
"types": "dist/node/big-decimal",
Expand Down
8 changes: 4 additions & 4 deletions src/big-decimal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -177,14 +177,14 @@ class bigDecimal {
return new bigDecimal(multiply(this.value, number.getValue()));
}

static divide(number1, number2, precision?: number) {
static divide(number1, number2, precision?: number, mode?: RoundingModes) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return divide(number1, number2, precision);
return divide(number1, number2, precision, mode);
}

divide(number: bigDecimal, precision?: number) {
return new bigDecimal(divide(this.value, number.getValue(), precision));
divide(number: bigDecimal, precision?: number, mode?: RoundingModes) {
return new bigDecimal(divide(this.value, number.getValue(), precision, mode));
}

static modulus(number1, number2) {
Expand Down
7 changes: 7 additions & 0 deletions src/divide.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import bigDecimal from "./big-decimal";
import { RoundingModes } from "./roundingModes";
const divide = bigDecimal.divide;

describe("divide", function () {
Expand Down Expand Up @@ -100,4 +101,10 @@ describe("divide", function () {
it(".102 / .0383292 = 2.66115651", function () {
expect(divide(".102", ".0383292", 8)).toBe("2.66115651");
});
it("division of 27.999972 by 128 with precision of 10 should return 0.2187497812", function() {
expect(divide(27.999972, 128, 10)).toBe("0.2187497812");
})
it("division of 27.999972 by 128 with precision of 10 and rounded by HALF_UP mode should return 0.2187497813", function() {
expect(divide(27.999972, 128, 10, RoundingModes['HALF_UP'])).toBe("0.2187497813");
})
});
5 changes: 3 additions & 2 deletions src/divide.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { add, trim } from './add';
import { roundOff } from './round';
import { RoundingModes } from './roundingModes';

export function divide(dividend, divisor, precission = 8) {
export function divide(dividend, divisor, precission = 8, mode = RoundingModes.HALF_EVEN) {
if (divisor == 0) {
throw new Error('Cannot divide by 0');
}
Expand Down Expand Up @@ -90,5 +91,5 @@ export function divide(dividend, divisor, precission = 8) {
}
}

return ((neg == 1) ? '-' : '') + trim(roundOff(quotent, precission - 2));
return ((neg == 1) ? '-' : '') + trim(roundOff(quotent, precission - 2, mode));
}

0 comments on commit efbe456

Please sign in to comment.