将time_t转换为double并返回

时间:2017-03-02 13:45:25

标签: c++ c

我想将time_t值转换为double,然后返回:double转换为time_t

在什么情况下我可能会在转换中丢失数据?

1 个答案:

答案 0 :(得分:3)

  

...将time_t值转换为double,然后返回...
  在什么情况下我可能会在转换中丢失数据?

在某些情况下,没有。 time_t是一些真实类型。 C11§7.27.13
整数和实数浮点类型统称为实数类型。 C11§6.2.517

因此,如果time_tdouble相同,则转换中不会有任何损失。

time_t通常表示为32位或64位整数。 Typical double可以精确编码所有53位无符号值(或54位有符号整数值),因此当time_t为32位整数时,不应发生转换丢失。当time_t是一个64位整数时,转换为double开始产生四舍五入超过2 53 的值。

如果double值来自原始time_t,则第二次转换返回步骤不应发生任何损失,但如果尝试将任意double更改为“time_t,则可能会导致未定义的行为一个整数。

不太常见,float可以是long doublelong longpatsubst等,并且类似的问题也适用。