gpt4 book ai didi

c# - Math.Round() 实际上并没有四舍五入我的 double

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:09 27 4
gpt4 key购买 nike

我试图返回一个四舍五入到小数点后两位的 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);
}

这是实际的数学方程式(和子方程式),由客户手写: enter image description here enter image description here

现在,这里实际发生的是返回值是 315.57999999999998,而它应该是 315.58。知道为什么会发生这种情况吗?

最佳答案

一切都与 double 和它们可以准确表示的数字有关。如果您需要绝对准确,请使用小数,或者为了显示目的在末尾四舍五入您的结果。

最后回答你关于四舍五入的问题,可能是你的结果 315.58 不能准确显示为 double to 2DP。

关于c# - Math.Round() 实际上并没有四舍五入我的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com