Fix a crash when rounding very small numbers.

This commit is contained in:
Mike Bostock 2011-08-17 16:13:50 -07:00
Родитель f12352c6f4
Коммит 7c2062f289
4 изменённых файлов: 8 добавлений и 4 удалений

2
d3.js поставляемый
Просмотреть файл

@ -525,7 +525,7 @@ var d3_format_types = {
f: function(x, p) { return x.toFixed(p); },
r: function(x, p) {
var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
return d3.round(x, p - n).toFixed(Math.max(0, p - n));
return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
}
};

4
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -67,7 +67,7 @@ var d3_format_types = {
f: function(x, p) { return x.toFixed(p); },
r: function(x, p) {
var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
return d3.round(x, p - n).toFixed(Math.max(0, p - n));
return d3.round(x, p - n).toFixed(Math.max(0, Math.min(20, p - n)));
}
};

Просмотреть файл

@ -105,6 +105,10 @@ suite.addBatch({
assert.strictEqual(format(".5r")(123.45), "123.45");
assert.strictEqual(format(".6r")(123.45), "123.450");
},
"can round very small numbers": function(format) {
var f = format(".2r");
assert.strictEqual(f(1e-22), "0.00000000000000000000");
},
"can group thousands": function(format) {
var f = format(",d");
assert.strictEqual(f(0), "0");