Представление с фиксированной точкой двойного типа

Я пытаюсь преобразовать двойной тип в представление фиксированного типа. В зависимости от выбранного входа мои исходные значения могут быть, например, 0,00996, 989,15, 1600,25, 89,72 и т. Д. Дело в том, что все мои входные значения всегда положительны, но количество цифр до (и после) десятичного разряда может меняться. Я пытаюсь преобразовать эти двойные типы в представление с фиксированной точкой с помощью подходящего масштабирования. Я пробовал масштабирование 2,14 (умножить на 16,384), но не уверен, как расширить это в случае переменного числа цифр перед десятичным знаком. Кроме того, как я могу наилучшим образом обеспечить максимальную точность / точность в преобразованных значениях? Любая помощь будет принята с благодарностью. Спасибо.

Код, который я использую:

fixedScale = (int) Math.Pow(2.0, 64.0);
int new_val = (int) (fixedScale * value);

1 ответ

Решение

Если вам нужно представление с фиксированной точкой, вам просто нужно определиться с масштабом. Как только вы решили, что вы конвертируете из плавающего в фиксированное, вот так:

int fixedValue = (int)Math.Round(floatValue*Scale);

И в другом направлении, как это:

double floatValue = (double)fixedValue/Scale;

От того, какой масштаб использовать, зависит от того, чего вы пытаетесь достичь и каковы входные данные.

Другие вопросы по тегам