3

我想将诸如 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;
}

这会将字符串解析为浮点数,然后将其修剪到小数点后 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 回答