【发布时间】:2013-03-13 18:48:59
【问题描述】:
如何在 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 !!!
【问题讨论】:
-
你应该首先确定你想把多少小数点变成整数。否则你得不到你想要的。即 1.30 应该返回与 1.3 相同的两个整数。
-
我已经通过将第一个示例中的分数乘以 10^3 和第二个示例中的分数乘以 10^7 来定义我想要的小数位数
-
这样做你会遇到小数精度的小问题,此外......如果你输入一个数字 30.2330000 和 30.233,你怎么知道乘以 10^3 和 10^7?答案是你可以知道,但程序不会知道,因为对程序来说每个数字都是一样的。
-
在我的情况下这不是问题,因为我知道来自 gps 的数据我总是 7 个小数点
-
如果你知道它总是 7 那么你永远不会这样做
*pow(10,3)。