在 Lua 中如何使小数进行四舍五入后向下取整的方法?

我目前正在使用以下函数进行四舍五入:

function round(val, decimal)
  if (decimal) then
    return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
  else
    return math.floor(val+0.5)
  end
end

该函数的功能完美,但当数字落在0.5处时,例如5.5、1000.5或7.5时,我需要它向下舍入而不是向上。 我需要对函数进行哪些更改才能实现这一点?

点赞
用户2198692
用户2198692
function round(val, decimal)
  -- 取整数部分
  local rndval = math.floor(val)
  -- 取小数部分
  local decval = val - rndval
  if decimal and decimal ~= 0 then
    -- 如果需要四舍五入
    -- 先将小数乘以 10 的 decimal 次方
    decval = decval * 10 ^ decimal
    -- 对乘以后的数进行四舍五入操作
    if decval % 1 > 0.5 then
      decval = math.ceil(decval)
    else
      decval = math.floor(decval)
    end
    -- 将四舍五入后的小数加回到整数中
    return rndval + decval / 10 ^ decimal
  else
    -- 不需要四舍五入,则判断小数是否大于 0.5
    return decval > 0.5 and rndval + 1 or rndval
  end
end
2013-04-16 11:59:35
用户1847592
用户1847592
# round 函数

该函数用于将一个数字四舍五入到指定的小数位。

## 参数

- `val`(必须)- 要四舍五入的数字。
- `decimal`(可选)- 要保留的小数位数。

## 返回值

返回四舍五入后的值。

## 示例

```lua
local num = 3.1415926
local rounded = round(num, 2)

print(rounded) -- 输出 3.14

实现

function round(val, decimal)
  local exp = decimal and 10^decimal or 1
  return math.ceil(val * exp - 0.5) / exp
end

```

2013-04-16 12:16:32