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)
我试图使用格式化程序,但我想这不适用于浮点数据类型插入.任何建议或解决方案?
这是你的问题:
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)