Руби - математические операции - PullRequest
2 голосов
/ 21 сентября 2011

Я несколько минут назад пробовал простую математическую операцию

<%=((3+2+1)/100).round(8)%>

Результат равен 0,06 , но результат вышеприведенного кода рубина равен 0,0 . Я ожидаю, что результат будет 0,060000.

Почему бы и нет? Спасибо

Ответы [ 3 ]

6 голосов
/ 21 сентября 2011
(3+2+1)/100 

равно 0, потому что деление целое.Попробуйте

(3+2+1)/100.0

Видите ли, если оба аргумента / целочисленные, результатом деления является целое число (вся часть).Если хотя бы один из аргументов является плавающей точкой, то результат также является плавающей точкой.

4 голосов
/ 21 сентября 2011

Ужасная целочисленная арифметическая атака снова!

Когда вы вычисляете ((3 + 2 + 1) / 100), поскольку все операнды являются целыми числами, Ruby использует целочисленную арифметику, а не арифметику с плавающей запятой.

Если вы сделаете 7/100, он также вернет 0, поскольку он округляется до ближайшего целого числа, равного 0.

2 голосов
/ 21 сентября 2011

Операции, включающие только целочисленные данные, выполняются в целых числах (и тогда 6/100 равно 0).Преобразование этого 0 в число с плавающей запятой позже (на round) не возвращает вам уже отброшенную дробную часть.

Измените любое из значений на число с плавающей запятой (например, 3.0), и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...