Я вижу, что значения оси 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));