abseil-duration-division

absl::Duration 的算术运算类似于整数。这意味着两个 absl::Duration 对象的除法将返回一个 int64,任何小数部分将被截断为 0。有关 absl::Duration 算术运算的更多信息,请参见 此链接

例如

absl::Duration d = absl::Seconds(3.5);
int64 sec1 = d / absl::Seconds(1);     // Truncates toward 0.
int64 sec2 = absl::ToInt64Seconds(d);  // Equivalent to division.
assert(sec1 == 3 && sec2 == 3);

double dsec = d / absl::Seconds(1);  // WRONG: Still truncates toward 0.
assert(dsec == 3.0);

如果需要浮点数除法,可以使用 absl::FDivDuration() 函数,或使用单位转换函数,例如 absl::ToDoubleSeconds()。例如

absl::Duration d = absl::Seconds(3.5);
double dsec1 = absl::FDivDuration(d, absl::Seconds(1));  // GOOD: No truncation.
double dsec2 = absl::ToDoubleSeconds(d);                 // GOOD: No truncation.
assert(dsec1 == 3.5 && dsec2 == 3.5);

此检查会查找在浮点上下文中执行的 absl::Duration 除法,并建议使用返回浮点值的函数。