- toto
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 46
- お住まい・勤務地: 岡山
|
投稿日時: 2006-08-18 10:05
ASP.NETでグラフを表示する為、サードパーティのソフトを使用としています。
この際にPointF構造体を使用して表示を行うのですが、大きな数字が入ると、グラフに正しく表示されません。
具体的には、Y座標に「26,063,895,231」の値を代入すると、グラフでは、「26,063,894,528」にポイントが表示されます。
これは、予想するにPointFのY座標がSingleまでしか入らないから?
コード: |
|
Dim dateview As New DataView(dataSet1.Tables("dataSet1"))
' チャートにデータを代入する
Dim data As PointF() = CType(Array.CreateInstance(GetType(PointF), rowCount), PointF())
Dim i As Integer
For i = 0 To data.Length - 1
Dim y As Long = Long.Parse(dateview(i)("SUM").ToString())
data(i) = New PointF(i, y)
Next i
Dim series As ChartDataSeries = graph.ChartGroups(0).ChartData.SeriesList(0)
series.PointData.CopyDataIn(data)
|
大きな勘違いをしている様な、気もいたしますが、何卒宜しくお願いいたします。
[ メッセージ編集済み 編集者: toiry 編集日時 2006-08-18 10:05 ]
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-08-18 11:26
引用: |
|
toiryさんの書き込み (2006-08-18 10:05) より:
ASP.NETでグラフを表示する為、サードパーティのソフトを使用としています
(snip)
これは、予想するにPointFのY座標がSingleまでしか入らないから?
|
"サードパーティのソフト" が、具体的に何であるかはわかりませんが...
引用: |
|
MSDN2 ライブラリ - System.Single 構造体 より:
Single 値型は、-3.402823e38 から +3.402823e38 までの単精度 32 ビット数と、正の 0 または負の 0、PositiveInfinity、NegativeInfinity、および非数 (NaN) を表します。
|
とのことですから、メイン プログラム側でどうこうという問題ではないような気がしますが...
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- きよの
- 常連さん
- 会議室デビュー日: 2004/02/07
- 投稿数: 34
|
投稿日時: 2006-08-18 11:40
引用: |
|
toiryさんの書き込み (2006-08-18 10:05) より:
これは、予想するにPointFのY座標がSingleまでしか入らないから?
|
コード: |
|
Single f = 26063895231f;
Console.WriteLine(string.Format("{0:####################}", f));
|
C# ですが、こんなコードを実行すると。26063890000 と表示されますから、Single の精度の問題ではないかと。
|
- R・田中一郎
- ぬし
- 会議室デビュー日: 2005/11/03
- 投稿数: 979
|
投稿日時: 2006-08-18 11:57
引用: |
|
toiryさんの書き込み (2006-08-18 10:05) より:
これは、予想するにPointFのY座標がSingleまでしか入らないから?
|
PointFというよりも、単純に Long型の値をFloat型に入れた場合の問題かと。
Long型に値を入れて、Float型にキャストするだけで再現できますよ。
#ボクの場合は、グラフは形を再現できれば良いので、大きな値を扱うときは千円単位などにしちゃいます。
[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-08-18 11:59 ]
|
- なちゃ
- ぬし
- 会議室デビュー日: 2003/06/11
- 投稿数: 872
|
投稿日時: 2006-08-18 12:37
引用: |
|
R・田中一郎さんの書き込み (2006-08-18 11:57) より:
PointFというよりも、単純に Long型の値をFloat型に入れた場合の問題かと。
|
これってどういう意味(というか意図)ですか…?
単なるSingleの有効桁数の問題だと思いますが…
|
- なちゃ
- ぬし
- 会議室デビュー日: 2003/06/11
- 投稿数: 872
|
投稿日時: 2006-08-18 12:40
引用: |
|
toiryさんの書き込み (2006-08-18 10:05) より:
コード: |
|
Dim data As PointF() = CType(Array.CreateInstance(GetType(PointF), rowCount), PointF())
|
|
本題とは関係ないですが、なんでわざわざこんなことしてるんでしょ?
|
- toto
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 46
- お住まい・勤務地: 岡山
|
投稿日時: 2006-08-18 13:00
皆様、返信ありがとうございます。
ウォッチで見ると
Dim y As Long → 26063895231
data(0) → 2.60638945E+10
となっていたので、精度の問題かと。(根本的に考え方が違うのかな)
|
- toto
- 常連さん
- 会議室デビュー日: 2005/10/18
- 投稿数: 46
- お住まい・勤務地: 岡山
|
投稿日時: 2006-08-18 13:04
>なちゃさん
引用: |
|
なちゃさんの書き込み (2006-08-18 12:40) より:
引用: |
|
toiryさんの書き込み (2006-08-18 10:05) より:
コード: |
|
Dim data As PointF() = CType(Array.CreateInstance(GetType(PointF), rowCount), PointF())
|
|
本題とは関係ないですが、なんでわざわざこんなことしてるんでしょ?
|
これ、サンプルのコードをそのまま記載しているのですが、あまり意識していませんでした。。。
なんで、こんな事をしているのだろう?
|