大規模な編集
この関数は、あなたが望むことを行います:
function get_meaningful_digit_pos(digits, val1, val2) {
var max = Math.max.apply(null, [val1, val2].map(function(n) {
return Math.abs(n);
})),
digit = Math.pow(10, digits),
index = 0;
// For positive numbers, check how many numbers there are
// before the dot, then return the negative digits left.
if (max > 0) {
while (digit > 1) {
if (max >= digit) {
return -digits;
}
digits--;
digit /= 10;
}
}
// Loop 15 times at max; after that in JavaScript a double
// loses its precision.
for (; index < 15 - digits; index++) {
if (0 + max.toFixed(index) !== 0) {
return index + digits;
}
}
}
必要な最初の数字の位置を返します。0 はドット自体です。
ここに私が実行したいくつかのテストがあります:
get_meaningful_digit_pos(4, 1234, 0.0); // -3
get_meaningful_digit_pos(4, 12.000001234, 0.0); // -1
get_meaningful_digit_pos(4, 1.234, 0.0); // 0
get_meaningful_digit_pos(4, 0.1234, 1.0); // 0
get_meaningful_digit_pos(4, 0.0000001234, 0.0); // 7
get_meaningful_digit_pos(4, 0.0000001234, 10.0); // -1