1

我正在尝试通过执行一系列计算来执行计算,以从当前时间的总微秒回到 HHMMSSFFF 格式的当前时间。但是,当我尝试从总微秒数中减去 hours*3600000000 时,返回的值不正确(它偏离了一个数量级,并且数字本身是错误的。有谁知道如何解决这个问题?我试过了使用 long long int 和 long double 但它们都输出相同的值。我复制了下面的代码和控制台中的结果输出。

当数据进入时,时间存储在一个向量中(又名时间戳),这就是为什么有一个 temp_counter。我在 boost::posix_time 库中使用 time_duration。

long double total = cur_time.at(temp_counter).total_microseconds();

cout << total << endl;

int hours = total/(3600000000);
cout << hours << endl;
long long int temp = hours*3600000000;
cout << std::setprecision(20) << temp << endl;
total = total - temp;
cout << total << endl;

输出:

35465976558

9

2335228928

33130747630

根据我的计算,temp 实际上应该是 32400000000,新的总数应该是 3065976558。

4

1 回答 1

1

计算如下:

35465976558/ 3600000000 = 9,851660155 转换为 int 等于 9

9 * 3600000000 = ... 这里废话打到了风扇,因为 3600000000 不能放入 32 位 int 并且似乎没有正确转换为 long long,因此您应该将右侧转换为 long long int。

但是当你在第一个任务中得到一个 long double 时:为什么不一直使用 long double (或至少 double )并避免铸造恐怖?

于 2013-07-29T14:25:51.140 回答