С и с плавающей точкой - PullRequest
       4

С и с плавающей точкой

0 голосов
/ 26 октября 2018

Я написал программу на C и использую cJSON для инкапсуляции данных и отправки в Firebase.

Я просто хочу, чтобы число было числом, чтобы я мог выполнить некоторые вычисления в Firebase.

Здесь все становится грязно.

double 24.9

Это возвращает

24.899999999999999

Так, например,

round((399 / 16.0) * 10.0) / 10.0 = 24.8999999

Мне нужен только один десятичный знак, я хочу 24,9, мне нужно, чтобы он был представлен в виде числа. Похоже, мне просто нужно сделать sprintf () и использовать RAW в cJSON. Если в C нет другого способа сохранить мои 24,9 как 24,9.

Этот вопрос не задает вопросы о том, как работает плавающая точка. Я в курсе проблем. Однако я не видел подходящего метода для его решения.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

C с плавающей точкой не может этого сделать.

То, что вы можете сделать, это представить число в милли-единицах, как это:

int 24900

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

0 голосов
/ 26 октября 2018

dec24.9 - это двоичное, то есть dec1 / 3 - десятичное: число с бесконечным числом десятичных дробей.

Единственный способ (я знаю, что могут быть реальные решения) для передачичерез эту сложность состоит в том, чтобы поместить число в строку, используя sprintf действительно.

char *num = malloc(); //Large enough to contain the result or else... SEGFAULT
sprintf(&num, "%.2f", YOUR_MATH_HERE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...