【问题标题】:Unity - truncate all decimals from a float (not by rounding)Unity - 从浮点数中截断所有小数(不是通过四舍五入)
【发布时间】:2022-01-14 04:00:14
【问题描述】:

我有一个 C# 脚本,我想在其中获取一个浮点值,删除小数点后的所有内容,并获得剩余数字的 int。

例如2.5469 最终将是 [int]2。 例如546.5934 应该是 [int]546。

我正在使用 int 进行另一个计算,所以我不能只使用字符串格式。 Math.Roundf 也不起作用,因为我不希望它被四舍五入。

这是一个俄罗斯方块克隆,我正在尝试创建一系列 X 轴值,允许游戏碎片产生。我认为一个简单的方法是在我的场景中绘制游戏区域,通过使用精灵定义它,然后为这些精灵拉出 transform.position.x 值以找到该区域的范围。这就是为什么我不想使用带小数的浮点数。

例如如果我的右边界在 10.25 的 transform.position.x 处,而左边界在 -10.6 的 transform.position.x 处,那么我希望碎片能够在以下任一位置生成:[-8, -7, -6, ..., 0, 1, 2, ... 8]。我认为这将比让它们以 -8 到 8 之间的任何可能的浮点值生成更清晰。

所以为了获得这个范围,我计划从 10.25 和 -10.6 中取 10 和 -10,加/减 2(以确保在生成碎片时它们不会与游戏区域的边缘重叠),然后拉下一个生成块的 x 位置在该范围内的随机 int。

不幸的是,我找不到从 10.25 获得 10 或从 -10.6 获得 -10 的简单方法。

最简单的解决方案是将边界设置为 x 10.0 和 x -10.0。但是我想要一个边界不必位于这样特定坐标的解决方案,即允许将精灵放置在 10.12 的 x 处,并在计算之前从 transform.x.position 的浮点值截断小数进一步。

【问题讨论】:

  • 您是否尝试将值转换为int
  • 哈!谢谢!在 10.6 上尝试过,得到 10 个,效果很好。

标签: unity3d tetris


【解决方案1】:

您可以使用Mathf.FloorToInt 或转换为int。如果您想知道哪个性能更高,请查看answer

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多