Как использовать настройку десятичной точности для всех чисел двойного типа в большой программе на C ++ - PullRequest
1 голос
/ 11 декабря 2011

Как использовать настройку десятичной точности для всех чисел double в большой программе на C ++.

Я могу использовать stringstream и setprecision(n), чтобы сделать это, но я должен сделать это один за другим для каждого double числа во всей программе.

Как сделать это глобально раз и навсегда, чтобы все числа типа double в программе имели фиксированные десятичные цифры после десятичной точки (например, 4)?

Я не хочу использовать вызов функции, чтобы вызвать издержки при вызове.

спасибо

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

double тип не предназначен для того, чтобы делать то, что вы хотите: это плавающий десятичный тип, а не фиксированный десятичный тип.Что вам нужно, это какой-то десятичный тип, но, к сожалению, в C ++ такого типа еще нет.

В большинстве случаев его можно эмулировать целочисленным типом, где предполагается, что он представляет собой тысячные доли единицы.Вы просто должны быть осторожны в умножениях и делениях, чтобы исправить масштаб.Сложения и вычитания работают автоматически.

0 голосов
/ 11 декабря 2011

setprecision не изменяет точность значений типа double, а только точность, используемую при преобразовании в строку.

А преобразование значений типа double в строки является относительно дорогой операцией, поэтому накладные расходы на одну дополнительную функциюЗвонок должен быть незначительным.Если в коде, критичном к производительности, используется преобразование двух строк, то вы делаете это неправильно.

Мой совет - написать такую ​​функцию, как:

std::string FmtDbl(double d)
{
    std::ostringstream os;
    os << std::setprecision(4) << d;
    return os.str();
}

И использовать эту функциювезде, где вам нужно преобразование.

...