我試圖返回一個取整爲小數點後兩位的double
。我已經通過並驗證了,在每一步的過程中,我的所有值都是doubles
。這裏是我的方法:Math.Round()實際上並沒有將我的雙精度舍入
public double FindAzimuthAtPointK(LwdData pointKData, SurveyData stationOne, SurveyData stationTwo)
{
var deltaDepth = stationTwo.MeasuredDepth - stationOne.MeasuredDepth;
var valueG = FindValueG(pointKData, stationOne, stationTwo);
var valueH = FindValueH(pointKData, stationOne, stationTwo);
var valueY = FindValueY(stationOne, stationTwo);
var sinStationOneInclination = Math.Sin(RadianToDegreeConversion * stationOne.Inclination);
var sinStationTwoInclination = Math.Sin(RadianToDegreeConversion * stationTwo.Inclination);
var sinStationOneInclinationSquared = Math.Pow(Math.Sin(RadianToDegreeConversion * stationOne.Inclination), 2);
var sinStationTwoInclinationSquared = Math.Pow(Math.Sin(RadianToDegreeConversion * stationTwo.Inclination), 2);
var partOneBottom = ((180 * deltaDepth) * Math.Tan(RadianToDegreeConversion * (valueG*valueY)/2))/(Math.PI * valueY);
var partOneTotal = Math.Pow((valueH/partOneBottom), 2);
var partTwo = sinStationOneInclinationSquared * sinStationTwoInclinationSquared;
var topTotal = RadianToDegreeConversion * (partOneTotal - partTwo);
var bottom = 2 * sinStationOneInclination * sinStationTwoInclination;
var acosValue = Math.Acos(topTotal/bottom);
var azimuthAtPointK = stationOne.Azimuth + acosValue;
return Math.Round(azimuthAtPointK, 2);
}
下面是實際的數學方程式(和subequations),手由客戶書面:
現在,什麼實際發生在這裏的是,返回值是315.57999999999998
,當它應該是315.58
。任何想法爲什麼會發生?
嘗試使用'decimal'類型而不是'double'。這可能是一個精度問題,缺少雙倍數。 – evanmcdonnal
實際上它是'必須'和'是',而不是'嘗試'和'可能':-)雙倍不是關於「雙精度」,而是雙倍精度覆蓋_some_精度的範圍。因爲它們是二進制的,所以只能表示2的冪__accurately__ – TaW
可能的問題是,你不喜歡的數字接近315.58,可以用double來表示。這只是在使用浮點數時帶來的領域。 – hatchet