dollar
@dollar
Делай добро и бросай его в воду.

Как элегантнее всего сделать функцию, которая округляет число, только если он ближе 0.1 к целому, иначе nil?

Вообще нужно для Lua.
Но на JS тоже годится, просто тогда из функций можно использовать только Math.floor(), а вместо nil можно возвращать любое не-число (undefined, null, NaN, false, "false" и т.д.).
round(7) ---> 7
round(7.1) ---> 7
round(7.2) ---> nil
round(7.3) ---> nil
round(-5.2) ----> nil
round(-5.9) ----> -6
round(-5.1) ---> -5
round(-5.05) ----> -5
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
miraage
@miraage
Старый прогер
100 лет на Lua не кодил, спасибо за ностальгию)

https://repl.it/repls/IndelibleCluelessAdmin

-- http://lua-users.org/wiki/SimpleRound
function round(num, numDecimalPlaces)
  local mult = 10 ^ (numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end

function round_or_nil(num)
  local diff = math.abs(math.fmod(num, 1))
  
  if diff <= 0.1 or diff >= 0.9 then
    return round(num)
  end

  return nil
end


print(round_or_nil(7))
print(round_or_nil(7.3))
print(round_or_nil(-5.2))
print(round_or_nil(-5.9))
print(round_or_nil(-5.1))
print(round_or_nil(-5.05))
Ответ написан
dollar
@dollar Автор вопроса, куратор тега Lua
Делай добро и бросай его в воду.
local function round_or_nil(num)
	local res = math.floor(num + 0.5)
	local diff = math.abs(res - num)
	return (diff <= 0.1 or diff >= 0.9) and res or nil
end
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Но на JS тоже годится

https://jsfiddle.net/vgzah83L/
const roundOrNil = (n) => Math.abs(~~n - n) > 0.1 ? null : ~~n;

console.log(roundOrNil(7)); // 7
console.log(roundOrNil(7.3)); // null
console.log(roundOrNil(-5.2)); // null
console.log(roundOrNil(-5.9)); // null
console.log(roundOrNil(-5.1)); // -5
console.log(roundOrNil(-5.05)); // -5
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы