Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果Y值很大,C图表就会崩溃_C# - Fatal编程技术网

C# 如果Y值很大,C图表就会崩溃

C# 如果Y值很大,C图表就会崩溃,c#,C#,我从文件中读取一组值,然后在图表中显示数据。但如果Y值真的很大,我的图表就会崩溃。图表对象中是否存在错误 用于说明问题的示例代码: using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form

我从文件中读取一组值,然后在图表中显示数据。但如果Y值真的很大,我的图表就会崩溃。图表对象中是否存在错误

用于说明问题的示例代码:

using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            chart1.Series[0].ChartType = SeriesChartType.Line;
            chart1.Series[0].Points.AddY(0);
            chart1.Series[0].Points.AddY(1);
            chart1.Series[0].Points.AddY(3);
            chart1.Series[0].Points.AddY(1);
            chart1.Series[0].Points.AddY(9);
            chart1.Series[0].Points.AddY(5);
            chart1.Series[0].Points.AddY(3.15486e+29); // This big value makes the chart crash
        }
    }
}


这是一个已知的错误吗?

AddY属性不是一个Int吗,并且您传入的值超过了这个值?您还没有显示错误,但我怀疑您得到的结果是:“值对于Int32来说太大或太小”

无法用任何图表绘制无穷大,因此,试图绘制3.15486e+29这样的大值,您的图表应用程序正在崩溃。处理此类问题有两种方法:

  • 将输入缩放并过滤到正在绘制的范围内,并可被相关图表接受,如[Ymin到Ymax],超出该范围的任何数据将显示为无效

  • 如果数据比例变化很大,请使用对数图


  • 所以问题是图表内部使用十进制。因此,当我添加一个Y值3.15486e+29时,它不适合十进制类型的范围

    问题解决了(至少是图表出错的原因)


    :-)

    由于大数值是无意义的,无法显示,只需在添加到图表之前替换为合理的大数值。尝试使用对数Y轴刻度。我会说,这是设计上的,不适用于标准折线图。但3.15486e+28可以工作,而不是3.15486e+29,这太疯狂了:-/在我的VS2017中,错误是“数值太大或太小,不适合十进制”。对数y轴也没有帮助。但是,正如Lei所写,该值在图形图表中没有什么意义。不,不。它是双精度的,错误是“值对于decimal来说太大或太小”[link]()这不是正确的名称空间吗?您将参数与返回类型混淆了。对于decimal也是如此。。所有值(包括例如数据时间)都在内部转换为双精度。