Представление с фиксированной точкой двойного типа
Я пытаюсь преобразовать двойной тип в представление фиксированного типа. В зависимости от выбранного входа мои исходные значения могут быть, например, 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;
От того, какой масштаб использовать, зависит от того, чего вы пытаетесь достичь и каковы входные данные.