![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| DiMoN_TD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
Нашел неприятную для себя закономерность.
Если сложить два числа 0.7+0.7, то в итоге получаю 1.4 Если сложить два числа начиная от 8.4+0.7, то получаю числ 9.39999999, а числа ниже, т.е. 2.4 3.4 4.4 и т.д, дают нормальный результат... как решается эта проблема? |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Думаю ошибка где-то в другом месте.
|
|||
|
||||
| DiMoN_TD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
smartov,
Я извиняюсь.. не 8.4, а 8.7 8.4 у меня тоже нормально работает =) |
|||
|
||||
| Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Обычно используют Math.round(). Вначале умножают результат на 100-1000-10000-сколько хотите иметь знаков после запятой, а после Math.round() делят обратно.
Вы наверное в Mozill-е проводите эксперименты... Это сообщение отредактировал(а) Ghirik - 12.5.2008, 17:08 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
| DiMoN_TD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
Ghirik,
Нет.. провожу эксперементы в Опере. В ИЕ7 тоже самое. Добавлено через 5 минут и 9 секунд Ghirik, и кстати, то что вы мне предложили, результатом работы этой функции даже целое число будет с двумя нулями после запятой, например 10.00, а мне нужно так, что если число целое - то безо всяких запятых, а если уж дробное - тогда добавляются запятые. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 15 Всего: 315 |
да хрень какая-то
избавляться примерно таким методом:
|
|||
|
||||
| webevt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 235 Регистрация: 5.5.2005 Репутация: нет Всего: 3 |
||||
|
||||
| Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Ну... парсить нужно... если уж это так важно. Math.ceil( ) наверное не совскм корректно использовать, он из 1.01 делает 2. Добавлено @ 17:53 Блин! Вообще, какую то фигню тут обсуждаем... Мне стыдно, а Вам? Нужно просто все вводимые значения умножать до целого числа на 10-100-1000 и т.д., потом их перемножать, а уж потом отнимать нужное количество нулей. Это сообщение отредактировал(а) Ghirik - 12.5.2008, 17:54 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
| DiMoN_TD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
||||
|
||||
| Ghirik |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
0.7*9.7=(0.7*10)*(9.7*10)/100 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
||||
|
|||||
| DiMoN_TD |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
||||
|
||||
| Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Не нужно мучать результат умножения, нужно просто до того, введенные дробные числа умножить на нужное количество нулей. После этого их перемножить... результат будет корректный (ведь целые числа умножаются правильно), а потом, результат разделить на добавленное количество нулей.
Например, и меем два числа 9.7 и 0.7. Умножаем каждое на десять, получаем 97 и 7, перемножаем их, получаем 679 и делим на сто - 6.79. Добавлено через 2 минуты и 41 секунду Или 0.76 и 5.345 - 0.76 умножаем на 100, а 5.345 умножаем на 1000.... После перемножения, делим на 100000. -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
| Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Вот ведь бл...ин! Думал, сейчас быстренько слеплю такую считалку. Слепил, считает, но иногда браузер снова заклинивает, и выскакивают числа с астрономическим количеством знаков.
Сейчас некогда искать причину(видимо, что-то в цикле не поспевает), пока положу что есть:
Может кто вперед разберется. Это сообщение отредактировал(а) Ghirik - 12.5.2008, 22:31 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Мда. Очень веселая проблема.
Проще всего ее увидеть так
Проблема, оказывается, старая. Обещают пофиксить в JS 2.0 Пока что кроме toFixed никаких чудес :( |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Вот, imho, более правильная функция
Основная идея - при некорректном округлении получается дробь, оканчивающаяся на ...999x. Итого - достаточно найти период из 9-ок и добавить к предшествующей части 1.... Умножение на десятичные дроби, вроде, должно работать ;-) -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |