如何转换成30.8365146两个整数,30和8365146,例如,在Arduino的或C?
这个问题面临我,当我尝试发送GPS通过数据的XBee系列1,它不允许传输率的数字,所以我决定将数据分割成两个部分。 我怎样才能做到这一点?
我已经试过这样的事情:
double num=30.233;
int a,b;
a = floor(num);
b = (num-a) * pow(10,3);
输出是30
和232
! 输出不是30和233为什么,我该如何解决?
如何转换成30.8365146两个整数,30和8365146,例如,在Arduino的或C?
这个问题面临我,当我尝试发送GPS通过数据的XBee系列1,它不允许传输率的数字,所以我决定将数据分割成两个部分。 我怎样才能做到这一点?
我已经试过这样的事情:
double num=30.233;
int a,b;
a = floor(num);
b = (num-a) * pow(10,3);
输出是30
和232
! 输出不是30和233为什么,我该如何解决?
double value = 30.8365146;
int left_part, right_part;
char buffer[50];
sprintf(buffer, "%lf", value);
sscanf(buffer, "%d.%d", &left_part, &right_part);
你会得到单独存储在整数左/右部分。
PS其他的解决方案是由10一些力量,只是乘以你的电话号码,并发送一个整数。
可以使用输出sprintf的整数到字符数组,则更换'.'
用一个空格和使用sscanf的回读两个整数。
我是做花车,采用双层临时:
int fract(float raw) {
static int digits = std::numeric_limits<double>::digits10 - std::numeric_limits<float>::digits10 - 1;
float intpart;
double fract = static_cast<double>(modf(raw, &intpart));
fract = fract*pow(10, digits - 1);
return floor(fract);
}
我想,你可以使用四倍精度浮点格式,以实现双重一样: libquadmath 。
The 30 can just be extracted by rounding down (floor(x) in math.h).
The numbers behind the decimal point are a bit more tricky, since the number is most likely stored as a binary number internally, this might not translate nicely into the number you're looking for, especially if floating point-math is involved. You're best bet would probably be to convert the number to a string, and then extract the data from that string.
正如评论,你需要跟踪的小数位。 你不能这样做的直接转换为整数。 代码位会做这样的事情:
#include <stdio.h>
#include <math.h>
#define PLACES 3
void extract(double x)
{
char buf[PLACES+10];
int a, b;
sprintf(buf, "%.*f", PLACES, x);
sscanf(buf, "%d.%d", &a, &b);
int n = (int) pow(10, PLACES);
printf("Number : %.*f\n", PLACES, x);
printf(" Integer : %d\n", a);
printf(" Fractional part: %d over %d\n", b, n);
}
int main()
{
extract(1.1128);
extract(20.0);
extract(300.000512);
}
生产:
Number : 1.113
Integer : 1
Fractional part: 113 over 1000
Number : 20.000
Integer : 20
Fractional part: 0 over 1000
Number : 300.001
Integer : 300
Fractional part: 1 over 1000
怎么样使用地板()获取整数值和num%1(模运算)来获得小数部分?
然后,你可以通过10和圆形的倍数乘以小数部分。 这也将让你掌控你有多少位小数发送,如果在你的通讯受到限制。 标准。
将这项工作?
#include <math.h>
integer_part = floor(num);
decimal_part = fmod(num,1)*10^whatever;