C# GraphicPath.AddLine中的无意缩短(截断)值

C# GraphicPath.AddLine中的无意缩短(截断)值,c#,winforms,graphics,precision,floating-accuracy,C#,Winforms,Graphics,Precision,Floating Accuracy,我用graphicspath.AddLine命令加载坐标值,然后绘制它们,我注意到我的地图不太准确 有关守则如下。我将开始坐标和结束坐标从double转换为float,因为该命令只接受float值,然后将它们相乘,以便更好地缩放: GraphicsPath gp = new GraphicsPath(); gp.AddLine((float)(line.startX*10000), (float)(line.startY * 10000), (float)(line

我用graphicspath.AddLine命令加载坐标值,然后绘制它们,我注意到我的地图不太准确

有关守则如下。我将开始坐标和结束坐标从double转换为float,因为该命令只接受float值,然后将它们相乘,以便更好地缩放:

 GraphicsPath gp = new GraphicsPath();
 gp.AddLine((float)(line.startX*10000), (float)(line.startY * 10000), 
            (float)(line.endX * 10000), (float)(line.endY * 10000));
例如,startX值为
15.742560625076294
,但当我在调试器中检查gp路径数据时,我将其视为
157425.609
。最后7位数字缩短。它们是至关重要的,因为在这种情况下,米的差异很重要


这是浮动值相对于双精度值的限制吗?如何在所述命令中加载完整值?

是。Float只能容纳7位数字。你画的任何东西都应该是enouh。(所有GDI+图形都限制为32kx32k像素),但如果要进行任何计算,可能需要在数据中保持双精度的完整(er)精度。。((您确实为clientsize.width???)交换了width..)是的,我已经立即更改为clientize.width。放大时,有些线条看起来有点“不对劲”,但如果没有什么可以做的,就足够了。可惜没有
.AddLine
接受
双精度
十进制
.Hm,你能尝试使用像5000或1000这样的小比例因子吗?我得到了同样的结果,尝试了1000的比例,只是小数点变到了左边,而且线条更粗,必须坚持使用10kHm,仍然感到疑惑。只是为了确保:您确实检查了您使用的数字是否正确?这些错误:它们应该端到端连接(Z)还是一条线/街道应该与另一条线/街道接触(T)?