我已经使用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。
这个问题并不确定浮点如何工作。我知道有问题。但是,我还没有找到合适的方法来解决它。
答案 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);