.NET Charting создает исключение десятичного переполнения - PullRequest
0 голосов
/ 17 сентября 2018

Я вижу, что значения оси Maximum и Minimum имеют тип double.

Мне нужно было поддерживать 64-байтовый тип данных, поэтому в настоящее время я использую BigInteger для него. Теперь мне нужно показать это на графике и исследовать, что наибольшее значение беззнакового 64-байтового числа может содержаться в double, поэтому у меня нет проблем с этим.

Вот скрипка, показывающая, что она может: https://dotnetfiddle.net/sHJUof

Теперь, когда я пытаюсь использовать значение в графике:

this->chart1->ChartAreas[0]->AxisY->Maximum = (double)maxData;
this->chart1->ChartAreas[0]->AxisY->Minimum = (double)minData;

Я не уверен, что именно это вызывает исключение, но когда график инициализируется, он показывает большой красный X на всем холсте.

Вот трассировка стека и исключение, кажется, что внутренне он пытается использовать тип данных Decimal для выполнения какой-то операции, с которой я понятия не имею.

System.OverflowException: Value was either too large or too small for a Decimal.
    at System.Decimal.FCallAddSub(Decimal& d1, Decimal& d2, Byte bSign)
    at System.Decimal.op_Addition(Decimal d1, Decimal d2)
    at System.Windows.Forms.DataVisualization.Charting.Axis.FillLabels(Boolean removeFirstRow)
    at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetDefaultAxesValues()
    at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetData(Boolean initializeAxes, Boolean checkIndexedAligned)
    at System.Windows.Forms.DataVisualization.Charting.ChartArea.ReCalcInternal()
    at System.Windows.Forms.DataVisualization.Charting.ChartPicture.Paint(Graphics graph, Boolean paintTopLevelElementOnly)
    at System.Windows.Forms.DataVisualization.Charting.Chart.OnPaint(PaintEventArgs e)
    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
    at System.Windows.Forms.Control.WmPaint(Message& m)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Есть идеи, что я могу сделать, чтобы обойти это?

UPDATE

Исключение выдается, когда я добавляю элемент в его серию, как показано ниже:

this->chart1->Series[0]->Points->Add(gcnew DataPoint(dX_position, (double)dData));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...