Forum Webscript.Ru
Программирование => Perl => Тема начата: joymix от 10 Мая 2006, 00:15:20
-
Люди, у меня прям депрессия!
вычитаю на перле
my $i1 =4902.89;
my $i2=4902.9;
print $i2-$i1;
получаю какую-то байду. 0.00999999999930878
Что это и как поправить вычиталку?
Но при вычитании 0.9-0.89 все работает.
нужен хелп! Спасайте, теряю веру в математику. :)
-
Тут подсказали, оказывается, в двочном формате 0.01 = 0.009(9), но кто скажет, как привести это к "традиционной" математике.
-
а ты домнож на 100 отнеми а потом подели
-
perldoc -f printf
-
Frenky: Не команду int я тоже знаю.
Arto: printf - это скалярный вывод, он просто обрежет знаки и выведет по формату. тож не совсем то.
Сейчас я кое-как выкрутился - действительно помножил и поделил, но не на 100, а на 1000. Проблема в том, а что будет если завтра там столкнутся не сотые, а тысячные или миллионные доли? Нельзя же все время таким драконовским методом приводить 0.0(9) r 0.1
Может есть какой-нибудь универсальный способ что-нибудь сказать перлу, чтобы он математические операции с десятичными дробями адекватно выполнял? Или всю математику перемножать в integer?
-
мне вот забавно, а если бы это были деньги? Начинаю верить во всякие сказачные взломы кошельков :)))))
-
Что-то я не пойму Вашей проблемы. Вроде Вам уже ответили. Если нужно распечатать используйте printf, если только хранить, то оставьте как есть и не смотрите как оно там лежит, не нравится как есть, перезапишите sprintf\'ом.
-
Вопрос из фака.
perldoc -q "Why am I getting long decimals"
perldoc perlnumber
-
На тему чисел в перле:
perldoc Math::BigFloat
perldoc Math::BigInt
Может что интересное найдете.
-
All
[moderatorial]
Тема обжевывалась помногу раз. Сравнение float-ов может работать только до известного предела.
Формулу return(abs(a-b)