@Entry
@Component
struct Index {@State result: string[] = ['0']setParams(pattern: string) {const operators: string = '+-*/.'if (this.result.length == 1 && this.result[0] == '0') {if ('*/'.includes(pattern)) returnthis.result = [pattern]} else {const len = this.result.lengthconst last = this.result.lastIndexOf('.')const slice = this.result.slice(last + 1)if (last != -1 && pattern == '.' && /^\d+$/.test(slice.join(''))) returnif(!(operators.includes(this.result[len-1]) && operators.includes(pattern))){this.result.push(pattern)}}}calc() {let res = 0const dd = this.result.join('').match(/[\-\+]?\d+(\.\d+)?([\/\*]\d+(\.?\d+)?)*/g)dd.forEach(item => {if (/^[\+\-]?\d+(\.\d+)?$/.test(item)) {res += +item} else {let rr = 0let isj = falselet operator: string = "*"let rrr = item.match(/[\/\*]|(\d+(\.\d+)?)/g)for (let index = 0; index < rrr.length; index++) {const element = rrr[index];if (element == '-') {isj = true} else if ('*/'.includes(element)) {operator = element} else {if (rr == 0) {rr = +elementcontinue}if (operator == '*') {rr *= +element} else {rr /= +element}}if (isj) {rr = 0 - rr}}res += rr}})this.result = [res + '']}build() {Grid() {GridItem() {Text(this.result.join('')).padding(10).height('100%').width('100%').fontColor('#000000').textAlign(TextAlign.End).fontSize(50)}.columnStart(1).columnEnd(4).backgroundColor('#FFC0CB')GridItem() {Button('CE').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {if (this.result.length == 1) {if (this.result[0] == '0') returnthis.result = ['0']return}this.result.pop()})}GridItem() {Button('C').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.result = ['0']})}GridItem() {Button('/').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('/')})}.backgroundColor('#FFC0CB')GridItem() {Button('*').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('*')})}ForEach(['7', '8', '9'], (item: string) => {GridItem() {Button(item).type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams(item)})}}, item => item)GridItem() {Button('-').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('-')})}ForEach(['4', '5', '6'], (item: string) => {GridItem() {Button(item).type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams(item)})}}, item => item)GridItem() {Button('+').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('+')})}ForEach(['1', '2', '3'], (item: string) => {GridItem() {Button(item).type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams(item)})}}, item => item)GridItem() {Button('=').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.calc()})}.rowStart(5).rowEnd(6).backgroundColor('#FFC0CB')GridItem() {Button('0').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('0')})}.columnStart(1).columnEnd(2)GridItem() {Button('.').type(ButtonType.Normal).height('100%').width('100%').fontColor('#000000').backgroundColor('#FFC0CB').onClick(() => {this.setParams('.')})}}.columnsGap(10).rowsGap(10).padding(10).rowsTemplate('2fr 1fr 1fr 1fr 1fr 1fr').columnsTemplate('1fr 1fr 1fr 1fr').backgroundColor('#FFFFFF')}
}
效果图:
编辑器为Dev Eco