2013-09-03 2 views
1

Im пишу приложение, которое автоматически добавляет столбцы в div. (Divs внутри Div). Проблема связана с нечетными ширинами столбцов шара, такими как 6. 6 не может разделить на 100%, поэтому мое решение заключалось в том, чтобы найти остаток после десятичной дроби и добавить его в последний столбец.Расчет точной ширины процента

По какой-то причине, когда я вычислить остаток это 0,3999999999999915 вместо 0,4

Вот мой JQuery

var numCol = $('.column').length, 
     colWid = Math.floor((100/numCol) * 10)/10, 
     numRem = 100 - (colWid * numCol); 

    $('.column').width(colWid + '%'); 
    $('.column:last-child').width(colWid + numRem + "%"); 

    alert(numRem); 

Должен ли я использовать Math.round? Я беспокоюсь, что это может вызвать некоторые проблемы позже.


решаемые с

var numCol = $('.column').length, 
     colWid = Math.floor((100/numCol) * 1000)/1000, 
     numRem = (100 - (colWid * numCol)).toFixed(3); 

    $('.column').width(colWid + '%'); 
    $('.column:last-child').width(Number(numRem)+ colWid +'%'); 
+1

См: http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken –

ответ

2

Это не ошибка. Это именно то, как с плавающей точкой. Вы можете использовать number.toFixed() для преобразования float в строку

toFixed принимает несколько цифр в качестве параметра.

+0

Еще новичок в JS .. спасибо! – Ray

+0

Теперь он объединяет значения ex: 33.33.11 – Ray

0

Применить функцию Math.floor к целому календарю, а numCol должен быть целым числом или преобразовать в целое число.

colWid = Math.floor(((100/numCol) * 10)/10) 

Вместо

colWid = Math.floor((100/numCol) * 10)/10 
+0

Это превращает var в целое число. Идея заключалась в том, чтобы распространять ее поровну над каждой колонкой, пока она не сможет больше разделиться. – Ray

Смежные вопросы