这个问题被多次询问,但我无法让它运作......
我正在研究计算两点之间距离的程序,并计算单位走动的时间......
这是我需要做的简单版本:
x = 24
y = 23
Root of (24² + 23²) = 33.24 fields
33.24 x 30 = 997,2 minuts
997,2/60 = 16,62 hours
16: (60*0.62) = 16:37,2
16:37: (60*0,2) = 16:37:12
所以我在C#中获得了这段代码,但它无效:
first_town = "35|629";
second_town = "59|606";
snelheidUnit = 30;
string[] firstTownSplit = first_town.Split('|');
string[] secondTownSplit = second_town.Split('|');
int firstTownPart1 = Convert.ToInt32(firstTownSplit[0]);
int firstTownPart2 = Convert.ToInt32(firstTownSplit[1]);
int secondTownPart1 = Convert.ToInt32(secondTownSplit[0]);
int secondTownPart2 = Convert.ToInt32(secondTownSplit[1]);
int verschilX = firstTownPart1 - secondTownPart1;
int verschilY = firstTownPart2 - secondTownPart2;
double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY,2))); // Fields
double aantalMinuten = aantalVelden * snelheidUnit; // Minuts
double aantalUren = aantalMinuten / 60; // Hours
TimeSpan time = TimeSpan.FromHours(aantalUren);
string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
预期输出应为:00d:16h:37m:12s:772ms
但是:00d:16h:37m:14s:772ms
差异是2秒。瓶颈是什么?为什么预期输出和实际输出之间有2秒的差异?
答案 0 :(得分:2)
(24²+23²)的根= 33.24个字段
1105
的平方根不是 33.24
;如果你绕平方根,你只得到33.24
。所以比较你的问题描述:
33.24 x 30 = 997,2 minuts 997,2/60 = 16,62 hours 16: (60*0.62) = 16:37,2 16:37: (60*0,2) = 16:37:12
对于平方根的更精确值会发生什么:
33.241540277189322804630581542105 * 30 = 997.24620831567968413891744626316 minutes less 16 hours (960 minutes) leaves 37.246208315679684138917446263157 minutes less 37 minutes leaves 0.246208315679684138917446263157 minutes which gives 14.772498940781048335046775789394 seconds
与您获得的内容大约相差2秒
如果要重现原始计算,则需要在
之后执行某些操作double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY,2))); // Fields
以回合,与原作相同;例如,
aantalVelden = Math.Round(aantalVelden, 2);
答案 1 :(得分:1)
它看起来应该是这样的。十进制值只有很小的差异,最终导致几秒内差异达到预期结果。这是我用过的代码:
double verschilX = 24;
double verschilY = 23;
double snelheidUnit = 30;
double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY, 2))); // Fields
double aantalMinuten = aantalVelden * snelheidUnit; // Minuts
double aantalUren = aantalMinuten / 60; // Hours
TimeSpan time = TimeSpan.FromHours(aantalUren);
string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
答案 2 :(得分:0)
我拿了你的代码,没有编译并制作
double verschilY = 24;
double verschilX = 23;
double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY, 2))); // Fields
double aantalMinuten = aantalVelden * 30; // Minuts
double aantalUren = aantalMinuten / 60; // Hours
TimeSpan time = TimeSpan.FromHours(aantalUren);
string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
Console.WriteLine(FinalTime);
然后回答了正确答案。