2013-09-24 3 views
3

Я хочу присвоить значения, такие как 137.55, столбцу «число» в диаграмме Google, а затем построить его. В любое время я назначу плавающий номер, он бросает это исключение:Настройка плавающих точек в графических диаграммах Google

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}} 
     ); 

Я пытался использовать форматер, но я предполагаю, что это не для вставки типа данных с плавающей точкой , любые советы или решения?

+0

Пожалуйста, поделитесь содержимое 'arr' и/или' myVal'. Если вы поместите данные вручную, используя 32.03, он будет работать нормально, так что там происходит что-то другое. – jmac

ответ

5

Это ваша проблема:

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; 
} 
Смежные вопросы