C# 鲁棒模精度

C# 鲁棒模精度,c#,modulo,rounding-error,robustness,C#,Modulo,Rounding Error,Robustness,首先,举个例子: 我有一个Lat/Lon(11.1,11.1),我想把它转换成度,分,秒的格式 I代码: double degrees = 11.1; double minutes = (degrees % 1) * 60; // evaluates to 5.999999, should be 6.0 double seconds = (minutes % 1) * 60; // evaluates to 59.999999, should be 0 string result =

首先,举个例子:

  • 我有一个Lat/Lon(11.1,11.1),我想把它转换成度,分,秒的格式
I代码:

double degrees = 11.1;
double minutes = (degrees % 1) * 60;  // evaluates to 5.999999, should be 6.0
double seconds = (minutes % 1) * 60;  // evaluates to 59.999999, should be 0

string result = $"{Math.Floor(degrees)}, {Math.Floor(minutes)}, {Math.Round(seconds)}";
  • 结果是“11,5,60”,而不是“11,6,0”
现在,我知道通常很难使用双除法,但我发现,如果我重新设计方程式:

double minutes = degrees * 60 % 60;  // evaluates to 6
我得到了正确的答案。我的问题是,

这个等式的第二个版本在编程上是否更健壮?如果是,原因是什么?

请参阅