在谷歌图表图表中设置浮点数

Ale*_*lex 3 javascript graph google-visualization

我想将值为137.55的值分配给谷歌图表中的"数字"类型列,然后绘制它.无论何时我分配浮点数,它都会抛出此异常:

Uncaught Error: Type mismatch. Value 32.03 does not match type number in column index 1 
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

      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}}
          );
Run Code Online (Sandbox Code Playgroud)

我试图使用格式化程序,但我想这不适用于浮点数据类型插入.任何建议或解决方案?

asg*_*ant 6

这是你的问题:

myVal = parseFloat(Math.round(myVal * 100) / 100).toFixed(2);
Run Code Online (Sandbox Code Playgroud)

方法的返回值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;
}
Run Code Online (Sandbox Code Playgroud)

这会将字符串解析为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;
}
Run Code Online (Sandbox Code Playgroud)