c - 如何在arduino中将double的int部分和小数部分转换为两个整数

标签 c int double arduino

<分区>

如何在 Arduino 或 C 中将例如 30.8365146 转换为两个整数:30 和 8365146。

当我尝试通过不允许传输小数的 xbee 系列 1 发送 gps 数据时,我遇到了这个问题,所以我决定将数据分成两部分。我该怎么做?

  double num=30.233;
  int a,b;
  a = floor(num); 
  b= (num-a) * pow(10,3);

输出:30 和 232 !!! 输出不是 30 和 233 为什么以及如何修复它

  double num=30.2334567;
  int a,b;
  a = floor(num); 
  b= (num-a) * pow(10,7);

输出:30 和 32767 !!!

最佳答案

由于这个问题可能涉及舍入误差,正如其他答案所建议的那样,我建议先对浮点值进行乘法运算,然后再进行减法运算。例如,这段代码产生了您正在寻找的输出:

int main() {
    double num = 30.233;
    int a,b;
    a = floor(num);
    b = num * pow(10,3) - a * pow(10,3);
    printf("%d",b);

    num = 30.2334567;
    a = floor(num);
    b = num * pow(10,7) - a * pow(10,7);
    printf("%d", b);

    return 0;
}  

输出:233 和 2334567

关于c - 如何在arduino中将double的int部分和小数部分转换为两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393907/

相关文章:

c - 多连接Web服务器C

c - 从 popen() 读取输入到 C 中的 char *

c - Valgrind 在空函数中报告 "still reachable"

c++ - C++中两个整数的乘法

c - c 如何在 8 位槽中存储 double 小数?

c - Head First C 反向字符串示例

c - 如何将无符号 24 位 int 转换为有符号 int 并将符号扩展为 32 位?

c# - 如何将 int 设置为 byte* C#

C++无法完成 double 值的平均计算

c++ - 具有 double 的二进制文件大小不一致 (C/C++)