3

Googleチャートの「数字」型の列に137.55などの値を代入してプロットしたい。浮動小数点数を割り当てるたびに、この例外がスローされます:

Uncaught Error: Type mismatch. Value 32.03 does not match type number in column index 1 

私のコードは次のようなものです:

      var data = new google.visualization.DataTable();

   data.addColumn('number','Loop');
   data.addColumn('number','ReqSec');
   var myTicks = new Array();

   var formatter = new google.visualization.NumberFormat({
       fractionDigits: 2
    });

   for (var i=0;i<arr.length;i++){
        myVal = $.trim(arr[i][10]);
        myVal = parseFloat(Math.round(myVal * 100) / 100).toFixed(2);
        data.addRow([parseInt(i), myVal]);
        myTicks[i] = i;
   }

   formatter.format(data, 1);

  // Create and draw the visualization.
  new google.visualization.AreaChart(document.getElementById('visualization')).
      draw(data, {curveType: "function",
                  width: 700, height: 400,
                  vAxis: {title: 'Throughput'},
                  hAxis: {title: 'Loop', ticks: myTicks}}
          );

フォーマッターを使ってみましたが、浮動小数点データ型の挿入用ではないようです。アドバイスや解決策はありますか?

4

1 に答える 1

6

これはあなたの問題です:

myVal = parseFloat(Math.round(myVal * 100) / 100).toFixed(2);

toFixedメソッドの戻り値は数値ではなく文字列です。を使用Math.round(myVal * 100) / 100すると、小数点以下 2 桁の精度の浮動小数点数がそのまま得られます。呼び出す必要はありませんtoFixed。また、数値で parseFloat を呼び出すのはかなり無意味です。配列から取得する文字列値で呼び出す必要があります。そして第三に、呼び出しparseInt(i)も無意味です。iこれは、取得しようとしているのと同じくらいの整数が既にあるためです (技術的には、javascript のすべての数値は浮動小数点です)。代わりにこれを試してください:

for (var i=0;i<arr.length;i++){
    myVal = parseFloat($.trim(arr[i][10]));
    myVal = Math.round(myVal * 100) / 100;
    data.addRow([i, myVal]);
    myTicks[i] = i;
}

これにより、文字列が float として解析され、小数点以下 2 桁の精度にトリムされます。配列内のデータによって指定された精度でデータをグラフ化することに関心があるが、ツールチップに表示される値を小数点以下 2 桁まで切り詰めたい場合は、代わりに次のように実行できます。

for (var i=0;i<arr.length;i++){
    myVal = parseFloat($.trim(arr[i][10]));
    data.addRow([i, {v: myVal, f: myval.toFixed(2)}]);
    myTicks[i] = i;
}
于 2013-09-25T00:59:01.533 に答える