Деление числа с плавающей точкой/целого числа на целое число в jquery

Я делю число (может быть в формате суммы XX.XX) на целое число.

Но когда я делаю 6,6/6 или 3,3/3, это дает 1,099999... вместо 1,1.

Что я делаю, так это делю сумму поровну между несколькими людьми, и если существует какая-либо оставшаяся сумма, я добавляю эту дополнительную сумму одному человеку из них.

Может быть что-то в этом роде, 104/6 будет делиться на 17,85, 17,83, 17,83, 17,83, 17,83, 17,83 [Может быть неточно, просто для иллюстрации].

Ссылка на JS Bin ----> http://jsbin.com/amileg/1/edit

Пожалуйста, помогите мне получить правильную логику расчета.

Спасибо!!


person sami_ui    schedule 17.06.2013    source источник
comment
Это естественно для IEEE с плавающей запятой. Этот вопрос задавали много раз; Я постараюсь найти хорошего, чтобы порекомендовать вам.   -  person Eric Jablow    schedule 17.06.2013
comment
Решение состоит в том, чтобы выбрать подходящее количество десятичных знаков для округления и сделать это (один раз, в конце < i>всю вашу арифметику с плавающей запятой).   -  person Blazemonger    schedule 17.06.2013


Ответы (2)


Это арифметика с плавающей запятой, а это ошибки округления. Вы можете прочитать это, чтобы узнать больше.

Сжатие бесконечного числа действительных чисел в конечное число битов требует приближенного представления. Хотя существует бесконечно много целых чисел, в большинстве программ результат целочисленных вычислений может храниться в 32 битах. Напротив, при любом фиксированном количестве битов большинство вычислений с действительными числами будут давать величины, которые невозможно точно представить с использованием такого количества битов. Поэтому результат вычисления с плавающей запятой часто должен быть округлен, чтобы вернуться к его конечному представлению. Эта ошибка округления является характерной особенностью вычислений с плавающей запятой.

Все числа в JavaScript представлены в двоичном виде как двойники IEEE-754, что обеспечивает точность до около 14 или 15 значащих цифр. Они не всегда точно представляют действительные числа, включая дроби.

person AllTooSir    schedule 17.06.2013

Вы можете использовать .toFixed()

var res = (vall / tot).toFixed(2);
//input `6.6/6`: , output : `1.10`

Демо ----> http://jsbin.com/amileg/4/edit

person Mohammad Adil    schedule 17.06.2013
comment
Да, но я не хочу закругляться. Пожалуйста, посмотрите расчет, который я сказал, что я делаю. - person sami_ui; 17.06.2013