2016-07-08 10 views
0

Hallo Ich folge Code haben:Parse eine schwebten Zahl mit parseFloat()

keys = [ 
    { label: '1', key: '1' }, 
    { label: '2', key: '2' }, 
    { label: '3', key: '3' }, 
    { label: '4', key: '4' }, 
    { label: '5', key: '5' }, 
    { label: '6', key: '6' }, 
    { label: '7', key: '7' }, 
    { label: '8', key: '8' }, 
    { label: '9', key: '9' }, 
    { label: 'C', key: 'Delete' }, 
    { label: '0', key: '0' }, 
    { label: '.', key: '.' } 
]; 

I Schleife meine Schlüssel in einem ng-repeat so etwas wie ein Rechner so zu bauen:

<div class="cKeys"> 
    <div class="cKey" ng-repeat="item in ctrl.keys" ng-click="ctrl.modifyValue(item)">{{item.label}}</div> 
</div> 

Wenn ich auf einen Schlüssel klicke, rufe ich eine Funktion mit dem angeklickten Objekt als Parameter auf.

modifyValue(obj: any) { 
    let str = this.currentValue + obj.key; 
    this.currentValue = parseFloat(str); 
} 

In dieser Funktion baue ich einen String und analysieren es mit parseFloat() eine Reihe zu bekommen. Die this.currentValue ist ein ng-Modell eines Eingangs, wo meine Nummer angezeigt werden soll. So

wenn ich Folgeschlüssel klicken: 1, 2, 5, . (Punkt) und 3 erwarte ich, dass die Zahl 125.3 in meinem Eingang, aber es gibt 1253 ohne den Punkt? Ich dachte, wenn ich die parseFloat() benutze sollte es mir auch Floatetnummern zeigen. Was ist los mit dir?

+1

'125. wird als 125 geparst und dann verketten Sie 3 dazu – mplungjan

+3

Das '.' wird gelöscht, sobald es angehängt ist, als 'parseFloat ('125.') === 125 '. – sdgluck

+3

Ausführlichere Hilfe erhalten Sie, wenn Sie einen runnable [mcve] in die Frage einfügen, indem Sie Stack Snippets verwenden (die '<>' Schaltfläche in der Symbolleiste). –

Antwort

1

Die wird gelöscht, sobald sie angehängt ist, wie parseFloat('125.') === 125.

Pflegen Sie zwei Variablen. Eine, die das analysierte Ergebnis enthält, und eine, die die verkettete Zeichenfolge enthält. Analysieren Sie die verkettete Zeichenfolge immer:

modifyValue(obj: any) { 
    this.concatStr += obj.key; 
    this.currentValue = parseFloat(this.concatStr); 
} 

wie @ T.J. Crowder in den Kommentaren darauf hingewiesen, bedeutet dies, dass, wenn Sie die wählen, wird es nicht "vergessen", wenn Sie dann eine andere Nummer danach wählen.

+0

Erste Zeile hilft nicht die zweite. das ist, wenn du auf '.' klickst, läuft es zurück zu .......! du weißt es. – Jai

+2

@Jai: Sein Punkt ist, dass Sie die Tatsache, dass der '.' geklickt wurde, nicht verlieren. Und er hat Recht. –

+0

@ T.J.Crowder beide Daumen hoch. – Jai

Verwandte Themen