2013-04-09 13 views
8

Highcharts 3.0 scheint Gleitkommazahlgenauigkeitsproblem zu haben, wenn Tooltips in einem Kreisdiagramm angezeigt werden. Ich war in der Lage, den genauen Fehler neu zu erstellen, indem ich eines der Highcharts Demo-Kreisdiagramm verwendete - Pie with Legend. Klicken Sie auf "Edit in JsFiddle", um das Javascript zu bearbeiten.Highcharts-Kreisdiagramm ignoriert Prozentsatz tooltip-Einstellung und hat Gleitkomma-Ungenauigkeit Problem

Suchen Sie im JavaScript-Fenster nach dem Abschnitt für Serien und Daten. Behalten Sie die Firefox- und IE-Daten bei und verwerfen Sie den Rest der Daten, damit wir uns auf nur zwei Scheiben Kuchen konzentrieren können. Die beiden Daten-Chucks haben keinen Prozentsatz, der zu 100 addiert, so dass Highcharts die Prozentsätze für uns neu berechnen. Klicken Sie oben auf die Schaltfläche Run, fahren Sie mit der Maus über die Slices. Die Prozentwerte sind sehr genau und die Anzahl der Dezimalstellen ist sehr hoch. Aber warten Sie, schauen Sie sich die Javascript Tooltip-Option an, Highcharts ignoriert eindeutig die Einstellung "prozentuale Dezimalstellen: 1". Das ist Problem Nr. 1.

Lassen Sie uns jetzt die Daten manuell Prozentsätze wie folgt bearbeiten: [ ‚Firefox‘, 57,7], [ ‚IE‘, 42,3] So tun sie genau 100,0 addieren. Drücken Sie die Run-Taste erneut, die Tooltips der Slices zeigen 'Firefox: 57.0000000000001%' und 'IE: 42.3%' an. Es sieht so aus, als ob eine prozentuale Neuberechnung durchgeführt wurde, unabhängig davon, ob sich die Prozentsätze zu 100 addieren oder nicht, wodurch hier eine kleine Gleitkomma-Ungenauigkeit eingeführt wird. Dies ist Problem Nr. 2. Hätte in diesem Fall die Rundung "prozentuale Dezimalstellen" funktioniert, hätte dieses Thema verschleiert werden können.

Ich würde gerne wissen: * Wer sonst sieht das gleiche Problem und eine Art von Work-Around? * Können Highcharts auf diese Probleme reagieren und uns mitteilen, ob es sich um bekannte Fehler handelt?

+0

Ich weiß nicht, warum es "prozentualeDecimals" gibt, aber natürlich gibt es keine solche Option in Highcharts. Was die Ungenauigkeit angeht, versuche in JS 0,1 + 0,2 zu berechnen und Effekte zu beobachten. Was kann ich empfehlen, PointFormat zu entfernen und nur tooltip.formatter zu verwenden. –

+1

Danke Pawel. Ich konnte verwenden tooltip.formatter = function() { Rückgabe this.point.name + ': ' + Highcharts.numberFormat (this.percentage, 1) + '%'; } –

+1

Sie können auch einfach 'This.percentage.toFixed (1)' :) –

Antwort

16

Die Beantwortung dieser Frage anhand von Billy Reverb Kommentar:

Nur soviel ersetzen Attribute:

tooltip: { 
    pointFormat: '{series.name}: <b>{point.percentage}%</b>', 
    percentageDecimals: 1 
} 

hierfür:

tooltip: { 
    formatter: function() { 
        return this.point.name + ': <b>' + Highcharts.numberFormat(this.percentage, 1) + '%</b>'; 
       } 
} 
14

Eine einfachere Lösung ist die Verwendung

{point.percentage:.1f}% 

in dem point String

+1

es funktionierte für mich, aber was .1f bedeutet? – Naeem

+0

Genial, genau das, was ich gesucht habe! .1f bedeutet 1 schwebender Platz. f bedeutet float. – craig1231

2

Für mich ist die upvoted Lösung funktioniert nicht:

tooltip: { 
    formatter: function() { 
        return this.point.name + ': <b>' + Highcharts.numberFormat(this.percentage, 1) + '%</b>'; 
       } 
} 

aber dies tut:

this.percentage.toFixed(1) 
1

Bevor Sie Kopf-Schreibtisch-Kopf-Schreibtisch gehen, bei dem Versuch, um den Prozentsatz zu formatieren.

Hier sind einige Möglichkeiten, es zu tun:

  1. (Math.round(this.point.percentage*100)/100) + ' %'
  2. Highcharts.numberFormat(this.percentage, 1) + '%'
  3. this.percentage.toFixed(1)
  4. {point.percentage}% or {point.percentage:.1f}%

Ich verwende oft # 4 in Tooltips und Etiketten und, wenn sie nicht mit eine benutzerdefinierte Formatiererfunktion.