C和浮点数

时间:2018-10-26 14:53:42

标签: c floating-point

我已经使用cJSON用C和Im编写了一个程序来封装数据并将其发送到Firebase。

我只是希望数字是一个数字,这样我就可以在Firebase中对其进行一些计算。

这是混乱的地方。

24.899999999999999

这回馈了

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

例如

$records = TheModel::all();
foreach ($records as $record){
    if ($record->thefield == $value) {  // thefield is decrypted in the Eloquent model definition
        print $record->id;
    }
}

我只想要一个小数位,我想要24.9,我需要用数字来表示。看起来我可能只需要做一个sprintf()并在cJSON中使用RAW。除非C中有另一种方法将我的24.9保持为24.9。

这个问题并不确定浮点如何工作。我知道有问题。但是,我还没有找到合适的方法来解决它。

2 个答案:

答案 0 :(得分:1)

C浮点不能做到这一点。

您可以做的是用毫米表示数字-像这样:

int 24900

您会感到惊讶的是,当系统希望表达和交流浮点时,它是最可行的解决方案

答案 1 :(得分:0)

dec24.9是二进制,而dec1 / 3是十进制: 一个具有无限小数位数的数字。

克服这一困难的唯一方法(我知道-可能会有实际的解决方案)是确实使用sprintf将数字放入字符串中。

char *num = malloc(); //Large enough to contain the result or else... SEGFAULT
sprintf(&num, "%.2f", YOUR_MATH_HERE);
相关问题