我有一个格式为的数据列表
08:01:00.064
符号:小时,分钟,秒和毫秒
我需要将它们转换为:second.millisecond.
请在下面找到我的代码,
float calculateTime(char *line) {
int hour;
int minute;
int second;
int millisecond;
//transfer from char to int
hour = ((line[0] - '0')*10 + (line[1] - '0'))*3600;
minute = ((line[3] - '0')*10 + (line[4] - '0'))*60;
second = (line[6] - '0')*10 + (line[7] - '0');
millisecond = (line[9] - '0') *100 + (line[10] - '0') *10 + (line[11] - '0');
float time;
time = hour + minute + second + millisecond *0.001;
return (time);
Run Code Online (Sandbox Code Playgroud)
}
我的代码存在问题,毫秒将是不准确的.我认为这是由于计算时的浮动格式.
结果如下,
37831.945312 source毫秒= 944
我预期的输出是
37831.945312
典型的float(IEEE754 32位)仅精确到大约7位有效数字.你超过了那个.
一个办法?请double改用.这将给你大约15个重要数字.但请注意,结果可能仍然不准确.这就是浮点运算的本质.
一个体面的解决方 使用stuct包含时间值的替代值.有一个叫tm在<time.h>.