Какой тип данных c следует использовать для десятичных чисел? - PullRequest
0 голосов
/ 25 марта 2011

Мне нужно использовать поле типа числовое (11,9) в MySQL. Я использую C api, поэтому какой тип данных я должен использовать. Я использовал долго, поэтому он дает такой результат:

12.123456789 до 12.123457000

Я не хочу терять точность. Я думаю, что я должен использовать long double - но какой спецификатор (%_) я должен использовать? Для длинных это %f, но что для длинных двойных?

Ответы [ 4 ]

2 голосов
/ 25 марта 2011
long double d = 12.123456789;
printf ("%.9lf", d);

всякий раз, когда после десятичной запятой меньше 9 цифр, она будет заполнена нулями.

1 голос
/ 25 марта 2011

Спецификатором для long double является "% Lf".

Но даже double или long double (которые одинаковы на многих платформах) не дадут вам точно такое же представление, потому что двоичное представление 12.123456789 является бесконечной дробью. Если вы ограничены чистым C, вы можете использовать фиксированную точку на основе 64-битного типа int.

1 голос
/ 25 марта 2011

Это действительно зависит;если вы действительно хотите быть точным, строка C (char *) даст вам это.struct вашего собственного определения с использованием long и сохранением «коэффициента масштабирования», вероятно, позволит вам лучше выполнять вычисления.И double дает вам примерно 15 цифр для работы, но вычисления с double могут накапливать слишком много "шума" в младших битах, разрушая данные, которые могут быть точными.

0 голосов
/ 25 марта 2011

Вы должны использовать double со спецификатором scanf %lf или long double со спецификатором scanf %llf

...