Округление чисел до 1 - PullRequest
       51

Округление чисел до 1

1 голос
/ 25 марта 2020

Я пытаюсь округлить число влево до 1. Например, если число 12345.6789, округлить до 100000.0000 .. Если число 9999999.9999, округлить до 1000000.0000. Также нужно, чтобы это работало с десятичными числами, поэтому, если число равно 0,00456789, округлите его до 0,00100000.

В этом примере 5600/100000 = 0,056, и я хочу округлить до 0,01. Я использую следующий код в скриптах LUA, и он отлично работает.

function rounding(num)
  return 10 ^ math.floor((math.log(num))/(math.log(10)))
end
print(rounding(5600/100000))

Но если я использую то же самое для Javascript, он вернет -11 вместо 0,01.

function rounding(num) {
  return 10 ^ Math.round((Math.log(num))/(Math.log(10)))
}
console.log((rounding(5600/100000)).toFixed(8))

Любая помощь или руководство будет с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Проверьте этот код. Он обрабатывает персонажей индивидуально. Это похоже на работу.

function rounding(num) {
  const characters = num.toString().split('');
  let replaceWith = '1';
  characters.forEach((character, index) => {
    if (character === '0' || character === '.') {
      return;
    };
    characters[index] = replaceWith;
    replaceWith = '0';
  });
  return characters.join('');
}
console.log(rounding(12345.6789));
console.log(rounding(9999999.9999));
console.log(rounding(0.00456789));
console.log(rounding(5600/100000));
0 голосов
/ 25 марта 2020

Вы можете floor log 10 value и получить обратно значение экспоненциального значения с основанием 10.

Десятичные разряды с нулями не могут быть спасенным.

const format = number => 10 ** Math.floor(Math.log10(number));

var array = [
          12345.6789,     //  100000.0000 this value as a zero to much ...
        9999999.9999,     // 1000000.0000
              0.00456789, //       0.00100000
    ];

console.log(array.map(format));
...