11class Calculator {
2- constructor ( currentOperandTextElement , previousOperandTextElement ) {
3- this . currentOperandTextElement = currentOperandTextElement
2+ constructor ( previousOperandTextElement , currentOperandTextElement ) {
43 this . previousOperandTextElement = previousOperandTextElement
4+ this . currentOperandTextElement = currentOperandTextElement
55 this . clear ( )
66 }
77
@@ -30,20 +30,11 @@ class Calculator {
3030 this . currentOperand = ''
3131 }
3232
33- updateDisplay ( ) {
34- this . currentOperandTextElement . innerText = this . currentOperand . toLocaleString ( 'en' )
35- if ( this . operation != null ) {
36- this . previousOperandTextElement . innerText =
37- `${ this . previousOperand . toLocaleString ( 'en' ) } ${ this . operation } `
38- } else {
39- this . previousOperandTextElement . innerText = null
40- }
41- }
42-
4333 compute ( ) {
4434 let computation
4535 const prev = parseFloat ( this . previousOperand )
4636 const current = parseFloat ( this . currentOperand )
37+ if ( isNaN ( prev ) || isNaN ( current ) ) return
4738 switch ( this . operation ) {
4839 case '+' :
4940 computation = prev + current
@@ -64,17 +55,46 @@ class Calculator {
6455 this . operation = undefined
6556 this . previousOperand = ''
6657 }
58+
59+ getDisplayNumber ( number ) {
60+ const stringNumber = number . toString ( )
61+ const integerDigits = parseFloat ( stringNumber . split ( '.' ) [ 0 ] )
62+ const decimalDigits = stringNumber . split ( '.' ) [ 1 ]
63+ let integerDisplay
64+ if ( isNaN ( integerDigits ) ) {
65+ integerDisplay = ''
66+ } else {
67+ integerDisplay = integerDigits . toLocaleString ( 'en' , { maximumFractionDigits : 0 } )
68+ }
69+ if ( decimalDigits != null ) {
70+ return `${ integerDisplay } .${ decimalDigits } `
71+ } else {
72+ return integerDisplay
73+ }
74+ }
75+
76+ updateDisplay ( ) {
77+ this . currentOperandTextElement . innerText =
78+ this . getDisplayNumber ( this . currentOperand )
79+ if ( this . operation != null ) {
80+ this . previousOperandTextElement . innerText =
81+ `${ this . getDisplayNumber ( this . previousOperand ) } ${ this . operation } `
82+ } else {
83+ this . previousOperandTextElement . innerText = ''
84+ }
85+ }
6786}
6887
69- const currentOperandTextElement = document . querySelector ( '[data-current-operand]' )
70- const previousOperandTextElement = document . querySelector ( '[data-previous-operand]' )
71- const calculator = new Calculator ( currentOperandTextElement , previousOperandTextElement )
7288
7389const numberButtons = document . querySelectorAll ( '[data-number]' )
74- const operationButton = document . querySelectorAll ( '[data-operation]' )
90+ const operationButtons = document . querySelectorAll ( '[data-operation]' )
7591const equalsButton = document . querySelector ( '[data-equals]' )
7692const deleteButton = document . querySelector ( '[data-delete]' )
7793const allClearButton = document . querySelector ( '[data-all-clear]' )
94+ const previousOperandTextElement = document . querySelector ( '[data-previous-operand]' )
95+ const currentOperandTextElement = document . querySelector ( '[data-current-operand]' )
96+
97+ const calculator = new Calculator ( previousOperandTextElement , currentOperandTextElement )
7898
7999numberButtons . forEach ( button => {
80100 button . addEventListener ( 'click' , ( ) => {
@@ -83,24 +103,24 @@ numberButtons.forEach(button => {
83103 } )
84104} )
85105
86- operationButton . forEach ( button => {
106+ operationButtons . forEach ( button => {
87107 button . addEventListener ( 'click' , ( ) => {
88108 calculator . chooseOperation ( button . innerText )
89109 calculator . updateDisplay ( )
90110 } )
91111} )
92112
93- equalsButton . addEventListener ( 'click' , ( ) => {
113+ equalsButton . addEventListener ( 'click' , button => {
94114 calculator . compute ( )
95115 calculator . updateDisplay ( )
96116} )
97117
98- allClearButton . addEventListener ( 'click' , ( ) => {
118+ allClearButton . addEventListener ( 'click' , button => {
99119 calculator . clear ( )
100120 calculator . updateDisplay ( )
101121} )
102122
103- deleteButton . addEventListener ( 'click' , ( ) => {
123+ deleteButton . addEventListener ( 'click' , button => {
104124 calculator . delete ( )
105125 calculator . updateDisplay ( )
106126} )
0 commit comments