在c的int值开始时加0

时间:2016-05-21 07:45:31

标签: c int

我在WinCE7并获得当前时间,我正在使用GetLocalTime(&systemTime);。此函数提供当前时间的值。现在,如果毫秒为81,则会将其显示为81,因此当我减去两个时间值时会发生错误。例如:time1 : 12:34:13:851& time2: 12:34:14:81。现在我需要减去秒和毫秒。所以使用sprintf,我提取秒和毫秒并将它们放入time1& time2

sprintf(time1,"%d.%d",systemTime.wSeconds,systemTime.wMilliseconds) 

sprintf(time2,"%d.%d",systemTime.wSeconds,systemTime.wMilliseconds)

我正在使用time1 & time2atof转换为浮动。现在time1为13.851,time2为14.81。 time2的毫秒实际上是081,但它会显示81,因此在减去它时会将其视为810,它会给出错误的值。

time2-->  14.810              14.081
time1-->  13.851              13.851
          --------          ---------
result     0.959(wrong)        0.23(correct)

因此,为了消除此错误,我想到计算毫秒的数字,如果是2,则在开始时添加0。所以我做了:

double digits = (floor (log10 (abs (milliseconds))) + 1); //calculate digits
if(digits == 2) //if milliseconds contains 2 digits, we need to add 0 at starting
{
  sprintf(newMS,"0%d",milliseconds); //adding 0 to milliseconds
  finalMilliseconds = atoi(newMS);  //newMS is in char so converting it into integer and storing the value in finalMilliseconds
}

问题出现在这里。让我们说milliseconds = 18newMS = 018finalMilliseconds再次18

请建议任何其他转换方式或在开始时添加0的任何其他方式

3 个答案:

答案 0 :(得分:2)

根据MSDN https://github.com/angular/angular/issues/4933的文档:

  

不建议您添加和减去值   SYSTEMTIME结构获取相对时间。相反,你应该

     

SYSTEMTIME 结构转换为 FILETIME 结构。
   将生成的 FILETIME 结构复制到 ULARGE_INTEGER 结构。
   在 ULARGE_INTEGER 值上使用普通的64位算术。

SYSTEMTIME会让您了解如何开始使用。

答案 1 :(得分:1)

在我看来,最简单的解决方案是借用你需要的东西。

你已经有了整数。如果您从systemTime中减去两个t2值,t1,请说明

if( t1.wMilliseconds < t2.wMilliseconds ) {
    t1.wMilliseconds += 1000;
    t1.wSeconds--;
}

或者,只需执行减法。如果结果wMlliseconds为负数,请按上述方式进行调整。

但请注意确保t1 > t2。你不想要-1.25 = 0.0 - 0.75

如果你想要一个浮点数,而不是用字符串做上瘾,那就做一个:

double time1 = t1.wSeconds + 0.001 * t1.wMilliseconds;

C为你做转换。它比通过字符串更快,更直接,更不容易出错。

答案 2 :(得分:0)

处理丢失的前导或尾随零(在时间和长时间内发现)的这些奇迹的另一种方法是用四个零填充字符串。即你的新MS +“0000”,并取最左边的四个字符。 然后,您有一个数字(作为文本),范围从“0000”到“9990”。 在它前面放一个“1”,然后你就可以轻松无误地转换为10000到19990之间的整数。 然后你可以随意添加和减去。

笨拙?确实是的:)但是当GPS经度读数从11.59(有趣的数字)变为12.00时,我不得不做这样奇怪的技巧