Показать сообщение отдельно
  #1 (permalink)  
Старый 24.03.2019, 09:29
Новичок на форуме
Отправить личное сообщение для friosound Посмотреть профиль Найти все сообщения от friosound
 
Регистрация: 24.03.2019
Сообщений: 6

Проблема с числами с плавающей точкой.
В общем суть такая. Пытаюсь решить задачку на одном ресурсе

ссылка на условие в оригинале

На вводе имеется Float-число с четырьмя знаками после точки. Необходимо создать массив и вывести в консоль последовательно убывающую геометрическую прогрессию этого числа длинной в сто элементов. При этом каждое число должно отборажаться с также с четырьмя знаками после точки.

Пример ввода и вывода:

Ввод: 200.0000

Вывод:

N[0] = 200.0000
N[1] = 100.0000
N[2] = 50.0000
N[3] = 25.0000
N[4] = 12.5000
...бла бла и так до N[99]

Я если честно опробовал уже тучу разных вариантов , и всё равно при проверке получаю 5 процентов неверного вывода. Подозреваю , что проблема при неправильном округлении метода .toFixed(), но как её побороть ума не приложу .. помогите плс, может кто хорошо в этой теме шарит.

Вот несколько вариантов моих решений:

var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var lines = input.split('\n');

let x = parseFloat(lines[0]).toFixed(4);
let N=[],i,temp=0;
N[0] = x;
console.log(`N[${0}] = ${x}`);
for (i = 1; i < 100; i++){
  temp = (Math.floor((N[i-1])*10000)/10000);
  N[i] = temp/2;
  let string = String(Math.floor((N[i])*10000)/10000);
  let float = parseFloat(string).toFixed(4);
  console.log(`N[${i}] = ${float}`);
  }


------
let x = parseFloat(lines[0]);
let N=[],i,temp=0;
console.log(`N[0] = ${x.toFixed(4)}`);
for (i=1; i<100; i++) {
  N[i] = (x*10000/10000) / (Math.pow(2 ,i));
  console.log(`N[${i}] = ${parseFloat(N[i]).toFixed(4)}`);
}

-----
let x = parseFloat(lines[0]);
let N=[];
N[0] = x;
for (let i=1; i<100; i++) {
  N[i] = ((x*10000) / (Math.pow(2 ,i)) / 10000);
  let temp = String(N[i].toFixed(5));
  let compare = temp.substring(6);
  if (compare === '5'&& temp>0.00005) {
    N[i] = N[i].toFixed(4) - 0.0001;
  }
}
for (let i=0; i<100; i++) {
  console.log(`N[${i}] = ${(N[i].toFixed(4))}`);
}
Ответить с цитированием