如何将定点数转换为浮点数?

How do i convert a fixed point number into a float?

提问人:severelyautistic 提问时间:4/18/2023 最后编辑:gunr2171severelyautistic 更新时间:8/8/2023 访问量:275

问:

使用 Unity。 我需要使用定点确定性地将一些数据联网。如何将定点数转换回浮点数,以便将其应用于对象变换?

public class Fixed
{
    private int front;
    private int back;

    private const uint MAX_32 = 4294967295;
}

这是我的定点数类。

C# unity-game-engine 浮点定

评论

3赞 NineBerry 4/18/2023
为什么不使用“十进制”类型作为定点数?
1赞 Retired Ninja 4/18/2023
C# 固定点到浮点
0赞 Lutz Lehmann 4/18/2023
难道不是为了避免明确的转换吗?front+(double)back/MAX_32double res = back; res = front + res/MAX_32

答:

0赞 John McFarlane 4/18/2023 #1

不要想太多。只需按恒定量缩放您的实数(理想情况下是 2 或 10 的幂,具体取决于您的需要)并存储在整数中。要转换回来,请除以相同的金额。在这种情况下,请考虑将浮点值乘以 4294967296.0 并分配给 .long

0赞 zhuang liu 4/23/2023 #2

@NineBerry如前所述,您可以使用 Decimal 类型来表示定点数:

    decimal fixedPointNum = 123.456m; // a fixed point number
    float floatNum = Convert.ToSingle(fixedPointNum); 
    Console.WriteLine(floatNum);

评论

2赞 Lutz Lehmann 4/23/2023
你可以告诉自己什么是定点数。其目的是仅使用少量整数运算来模拟非常有限的子集中的实数。这与多精度浮点格式完全相反,无论它是使用 2 还是 10(或它们的某些幂)作为基础来实现的。
0赞 abel gladstone 8/8/2023 #3

答案取决于范围。 如果您尝试表示 (-1, +1) 中的十进制数,则可以将输入除以 0x7FFFFFFF。

如果您有其他范围(例如-256.0,255.0),则可以将输入除以0x007FFFFF

这完全取决于您在输入中期望的范围