[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: parseFloat
Ramzes_Ra
У меня такой скрипт
var newnow = parseFloat(factor)*parseFloat(inform);

где переменные factor и inform не целые числа. factor всегда равна 4.2
И вот смотрите:
1) при умножении factor на 3 будет "12.600000000000001" о_О как?
2) при умножении на 4.2 будет 17.64, а на 4,2(разделитель запятая) 16.8 ... о_О в чём разница?

В первом случае можно просто обрезать и оставлять только 2 знака после запятой.. скрипт для этого
Number.prototype.Crop = function (x){
var s = this+'', a = s.split('.');
a[1]=a[1]||'';
return parseFloat(a[0]+'.'+a[1].substring(0,x));
}
Хотя правила математики вообще нарушены =)

Что делать с второй ситуацией? Как так? И если дело в запятой, то как при введении запятой автоматически менять её на точку?
T1grOK
1) Это особенность, которая вытекает из способа хранения и обработки числовых данных в двоичной системе, подобные неточности при тех или иных ситуациях наблюдаются практически во всех ЯП.
2) 4,2 преобразовывается к 4, точнее преобразовать parseFloat не может, так как ожидает точку.
Решение заменить запятую на точку
var float_num = parseFloat(num.replace(/[,]+/g, '.'));


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Ramzes_Ra
Цитата (T1grOK @ 25.08.2013 - 11:11)
1) Это особенность, которая вытекает из способа хранения и обработки числовых данных в двоичной системе, подобные неточности при тех или иных ситуациях наблюдаются практически во всех ЯП.
2) 4,2 преобразовывается к 4, точнее преобразовать parseFloat не может, так как ожидает точку.
Решение заменить запятую на точку
var float_num = parseFloat(num.replace(/[,]+/g, '.'));

Большое спасибо =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.