将float转换为自定义定点数据类型

时间:2019-06-11 12:46:44

标签: c# numbers bit-manipulation

我有一个定点数据类型:

public struct Fixed
{
    public const long SCALE = 1_000_000_000;
    private readonly long unscaledValue;

    public static explicit Fixed(double value)
    {
        // Halp
    }

    public static explicit double(Fixed value)
    {
        // Halp
    }
}

因此,要代表5.2,unscaledValue将为5200000000。
floatdouble转换为我的数据类型以及相反的最佳方法是什么?

1 个答案:

答案 0 :(得分:-1)

您可以这样做

long fix = (long) value * scale;

将其转换为您的类型,诸如此类

double value = ((double) fix)/((double)scale);

用于重新转换。

但是要注意精度的损失,如果您想将两个类型的数字相乘,则需要重新调整运算符或结果的比例

例如

long fix3 = (fix1 * fix2)/scale;