diff options
| author | Marak <[email protected]> | 2017-02-28 18:00:37 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-02-28 18:00:37 -0500 |
| commit | d9369eafe02c442b455cd775f9a69a094f16a704 (patch) | |
| tree | 62ed9fb01303ab7ed0ef587d042ee76f0bd92709 | |
| parent | f379057be0112d6732b056d93d1380be18e1087a (diff) | |
| parent | 38d2f3449e1e5a78c7215e6c8f6346c0fd0a652b (diff) | |
| download | faker-d9369eafe02c442b455cd775f9a69a094f16a704.tar.xz faker-d9369eafe02c442b455cd775f9a69a094f16a704.zip | |
Merge pull request #478 from APIs-guru/master
[fix] Generation of float numbers
| -rw-r--r-- | lib/random.js | 4 | ||||
| -rw-r--r-- | test/random.unit.js | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/random.js b/lib/random.js index d5f112ce..17b74f64 100644 --- a/lib/random.js +++ b/lib/random.js @@ -47,8 +47,10 @@ function Random (faker, seed) { max += options.precision; } - var randomNumber = options.precision * Math.floor( + var randomNumber = Math.floor( mersenne.rand(max / options.precision, options.min / options.precision)); + // Workaround problem in Float point arithmetics for e.g. 6681493 / 0.01 + randomNumber = randomNumber / (1 / options.precision); return randomNumber; diff --git a/test/random.unit.js b/test/random.unit.js index 6214039b..133fd887 100644 --- a/test/random.unit.js +++ b/test/random.unit.js @@ -56,6 +56,14 @@ describe("random.js", function () { }); + it("provides numbers with a with exact precision", function() { + var options = { min: 0.5, max: 0.99, precision: 0.01 }; + for(var i = 0; i < 100; i++) { + var number = faker.random.number(options); + assert.equal(number, Number(number.toFixed(2))); + } + }); + it("should not modify the input object", function() { var min = 1; var max = 2; |
