Инкремент числа с плавающей точкой 
		
		
		
		Объясните странное поведение операций с числами с плавающей точкой. 
	Мне надо в цикле производить увеличение целой части исходного числа на 1. Если, например, число от 11 до 15, то десятичная часть через определенный шаг цикла стает больше исходной. Пример: 
var numsList = [];
var num = 12.001;
    
    for (var i = 0; i <= 5; i++) {
      numsList.push(num++);
    }
alert(numsList);
В пример, числа нормально увеличиваются до 15.001, затем получаем 16.000999999999998 и т.д. Надо чтобы десятичная часть оставалась постоянной. Можно ли как-то решить проблему?  | 
	
		
 Округлять до нужного знака, без вариантов. 
	 | 
	
		
 Спасибо большое за пример реализации! 
	Я так понимаю это особенность вычислительного движка JS. А такой вариант имеет право на жизнь?: 
var numsList = [];
var num = 12.001;
var digits = /(?:\.)(\d+)/.exec(num);
    for (var i = 0; i <= 5; i++) {
      if (digits === null) {
        numsList.push(num++);
      } else {
        numsList.push((num++).toFixed(digits[1].length) * 1);
      }
    }
alert(numsList);
alert(typeof numsList[5]);
 | 
	
		
 Дзен-трансгуманист, чего-то я не особо вдупляю - накой такие сложности в твоей функции? 
	
(function(a){
    window.alert = function(){
        a(Array.prototype.slice.call(arguments).join('\n'))
    }
}(window.alert))
function maxFraction (value, digits) {
 
  var fixed = (+value).toFixed(digits);
  var i = fixed.length - 1;
 
  loop: while (true) {
 
    switch (fixed.charAt(i)) {
 
    case "0": i--; continue;
    case ".": i--; break loop;
    }
 
    break;
  }
 
  return fixed.slice(0, i+1);
}
Number.prototype.round = function(p){ //почему не так?
  return +this.toFixed(p)
}
num = 0.1 + 0.2;
alert(
  num,
  maxFraction(num, 1),
  num.round(1),
  maxFraction(num+99, 1),
  (num+99).round(1),
  maxFraction(num, 0),
  num.round(),
  maxFraction(num, 5),
  num.round(5)
)
 | 
	
		
 В моей задаче есть два условия: 
	1. количество десятичных знаков наперед неизвестно (количество должно извлекаться из исходного числа) 2. должно возвращаться число (не строка)  | 
	
		
 Цитата: 
	
 Xотя, в принципе, погрешность, если вычисления не идут подряд, накапливаться не будет, а потому достаточно округлять до десяти знаков - лишнее отбросится: 
(function(a){
    window.alert = function(){
        a(Array.prototype.slice.call(arguments).join('\n'))
    }
}(window.alert))
Number.prototype.round = function(p){ 
  return +this.toFixed(p)
}
num = 0.1 + 0.2;
alert(
  num,
  num.round(10)
)
 | 
	
		
 Спасибо. Вопрос вычислений не стоит. Надо заполнить диапазон ячеек инкрементным набором чисел отталкиваясь от числа в первой ячейке. Соответственно все должно быть красиво без внезапных выскакиваний чисел с умопомрачительным количеством десятичных знаков. Что-то на подобии того, как это делается аутофиллером в Экселе или ООО Кальк. 
	 | 
	
		
 сделай тустринг, то что ДО точки преврати в число, инкриментируй, потом сделай тустринг, и вставь до точки в предыдущей строке, потом сделай пфрсфлоат. КЭП 
	 | 
	
		
 Цитата: 
	
 Цитата: 
	
  | 
	
		
 nerv_, за ссылочку спасибо. Вопрос собственно уже решен :) 
	 | 
| Часовой пояс GMT +3, время: 13:06. |