我知道标题不够明确,让我解释一下。我正在研究一个关于计算大地坐标的迭代算法的项目,这是它的第一部分。基本上程序正在使用文本框输入进行一些迭代计算。它将文本框输入转换为Single,将其用于计算,然后转换为String作为输出。在某些方面,我需要使用输出作为后续进程的输入,但问题是,它给出了稍微不同的结果。例如,这些是x,y,z的在线计算器的结果:1114125.84474949,-4844708.42056692,3982826.71498173;这些是我的1114125.55452963,4844708.5526556,3982826.75245773。是什么导致这个? (不要介意y的缺失减去)。总而言之,我想知道是否将文本框文本转换为单个,然后将它们转换为字符串会导致此错误。我希望问题很明确。
这是代码的一部分,它给出了我上面提到的结果。如果我可以解决问题,那么更复杂的迭代也会像这样工作。
private void button1_Click_1(object sender, EventArgs e)
{
this.timer1.Start(); // it's beside the point
double fi = Convert.ToSingle(phi.Text);
double lamda = Convert.ToSingle(lambda.Text);//lamda is input, lambda is textbox
double yuk = Convert.ToSingle(height.Text);
double a = Convert.ToSingle(aa.Text);
double b = Convert.ToSingle(bb.Text);
double ec = (Math.Pow(a, 2) - Math.Pow(b, 2)) / Math.Pow(a, 2); //eccentricity
double N = a / Math.Sqrt(1 - ec * Math.Pow(Math.Sin((Math.PI / 180) * fi), 2));
double xx = ((N + yuk) * Math.Cos((Math.PI / 180) * fi) * Math.Cos((Math.PI / 180) * lamda));
double yy = ((N + yuk) * Math.Cos((Math.PI / 180) * fi) * Math.Sin((Math.PI / 180) * lamda));
double zz = ((Math.Pow(b/a,2) * N + yuk) * Math.Sin((Math.PI / 180) * fi));
coorx.Text = System.Convert.ToString(xx); //xx, yy, zz are textboxes
coory.Text = System.Convert.ToString(yy);
coorz.Text = System.Convert.ToString(zz);
}
答案 0 :(得分:-1)
计算机使用二进制格式以便在内存中存储数字,此外,用于存储这些值的位数有限(取决于使用的类型),因此转换字符串值,这是给定的十进制数字格式,并且是单/双类型(因此实数值)通常与精度降低有关。