我在使用浮點數分隔long類型時遇到了精度問題,並最終導致應用程序中的計算出現混亂。假設我只是將毫秒轉換爲秒,因爲這是我們結束的要求。以下是一個樣本測試用例目的C--用浮點數除長而不丟失精度
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")
在劃分長時間浮點數時,它將精度減少了3,000分之一。類似於長時間除以雙。
我該如何做到這一點,以便它與預期的開始時間相同?我猜在小數四捨五入到最接近的千分之一也將是不錯,但我發現這裏的四捨五入方法是不可靠的或者類似這樣的
float roundToTwo(float num)
{
return round(100 * num)/100;
}
其中最有可能返回相同的值
你確定你的例子嗎?導致「2595.09497」的'2529095/100.f'看起來像是一個巨大的錯誤。 –
爲什麼你想要時間使用浮動而不是整數有什麼原因嗎? (您可以將時間轉換爲雙打以供後期顯示)。 –
@MarkDickinson我在回答第一次計算時,「長」到「浮點」轉換失去了精度,但這並不能解釋第二個結果。 –