我试图返回一个double四舍五入到两位小数的地方.我已经介入并证实,在我的所有价值观的每一步中,都是如此doubles.这是我的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
这是客户手写的实际数学方程(和子方程):

现在,这里实际发生的是返回值315.57999999999998应该是什么时候315.58.知道为什么会这样吗?
这完全取决于双精度和它们能准确表示的数字.如果您需要绝对精确度,请使用小数,或者在结尾处舍入结果以用于显示目的.
要回答有关最后四舍五入的问题,可能是因为315.58的结果无法准确显示为2到2的两倍.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |