Преобразование плавающего в пользовательский тип данных с фиксированной точкой - PullRequest
0 голосов
/ 11 июня 2019

У меня есть тип данных с фиксированной точкой:

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 будет 5 200 000 000.
Как лучше всего преобразовать float с и double с в мой тип данных, и наоборот?

1 Ответ

0 голосов
/ 11 июня 2019

Вы могли бы сделать что-то вроде этого

long fix = (long) value * scale;

за конвертацию в ваш тип и что-то вроде этого

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

для реконверсии.

Но помните о потере точности и о том, что если вы хотите умножить два числа вашего типа, вам нужно изменить масштаб либо оперантов, либо результата

, например

long fix3 = (fix1 * fix2)/scale;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...