Как определить количество мест после десятичного числа в значении с плавающей запятой? - PullRequest
2 голосов
/ 19 февраля 2010

В C ++ вы можете использовать std :: numeric_limits :: digits10, чтобы выяснить, сколько именно точек точности вы можете получить до десятичного знака.Как узнать, сколько десятичных знаков я могу получить после него, если я знаю, что число всегда будет фиксированной точкой от 0 до 1 включительно?

Редактировать: я спрашиваю, потому что у меня есть внешний ГСЧ, генерирующий двойные числа и передающий их во вторую программу, используя стандартный ввод и вывод, поэтому, если случайно сгенерированные числа не выводятся правильно на стандартный вывод,вторая программа не может получить их полные значения через стандартный ввод, потому что они усекаются при выводе первой программы, а затем округляются до представимых значений второй программой.Я хотел бы передать значения между программами полностью нетронутыми.Спасибо

Ответы [ 5 ]

4 голосов
/ 19 февраля 2010

std::numeric_limits<FloatingPointType>::digits10 - это общее количество десятичных цифр, которые тип может точно представлять.Если вы пишете число 1234,56 или 1,23456 ⋅ 10 3 или 123456 ⋅ 10 -2 , то количество точных цифр не имеет значения, поэтому не существует различия между до и последесятичное место.

4 голосов
/ 19 февраля 2010

Максимальное количество значащих цифр, которое вы можете иметь, задается как std::numeric_limits<...>::digits.Обычно это 24 и 53 для чисел с плавающей запятой IEEE и удваивается, соответственно.

0 голосов
/ 22 ноября 2010

Вы можете использовать setprecision(n);, где n - количество цифр после десятичной точки. Например, если я хочу 15 десятичных знаков в моем выводе:

cout<< setprecision(15);

Примечание: не забудьте включить заголовочный файл для использования этой функции:

#include<iomanip>
0 голосов
/ 19 февраля 2010

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

0 голосов
/ 19 февраля 2010

Стандарт C ++ не гарантирует вам ничего. Если вам нужно строго контролировать количество знаков после десятичной точки, вы должны написать собственный код для этого (например, вывод в фиксированном формате). В конечном итоге это зависит от того, какой компилятор вы используете. Вам бы повезло больше, если бы вы использовали контроль форматирования в C и printf, если вам нужно контролировать количество десятичных знаков.

...