【发布时间】:2017-07-31 15:10:05
【问题描述】:
我在将 long 类型与 float 相除时遇到了精度问题,最终弄乱了应用程序中的计算。假设我只是将毫秒转换为秒,因为这是我们的要求。下面是一个示例测试用例
long startTimeMS = 2529095;
NSTimeInterval expectedStartTime = 2529.095
NSTimeInterval startTime = startTimeMS / 1000.f; //Results to "2529.09497"
double startTimeDouble = startTimeMS / 1000.0 // Results to "2529.0949999999998"
XTCAssert(startTime == expectedStartTime, @"Invalid start time")
将 long 除以 float 时,精度会损失千分之三。与 long 除以 double 类似。
我怎样才能让它与预期的开始时间相同?我猜四舍五入到最接近的十进制千分之一也不错,但我在这里找到的四舍五入方法也不像这样可靠
float roundToTwo(float num)
{
return round(100 * num) / 100;
}
最有可能返回相同的值
【问题讨论】:
-
你确定你的例子吗?
2529095 / 100.f导致2595.09497似乎是一个巨大的错误。 -
您是否希望时代使用浮点数而不是整数? (您可以稍后将时间转换为双精度数以供显示)。
-
@MarkDickinson 我考虑回答在第一次计算中,
long到float的转换失去了精度,但这并不能解释第二个结果。 -
@MarkDickinson 完全正确,评论说“结果为“2595.0949999999998””
-
@PascalCuoq:啊,对不起;我懂了。为自己是个白痴而道歉。原帖中肯定有错字吗?
标签: objective-c floating-point precision long-integer divide