千家信息网

iOS开发如何实现计算器功能

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"iOS开发如何实现计算器功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"iOS开发如何实现计算器功能"吧!效果图Masonry使
千家信息网最后更新 2025年11月09日iOS开发如何实现计算器功能

这篇文章主要讲解了"iOS开发如何实现计算器功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"iOS开发如何实现计算器功能"吧!

效果图

Masonry

使用数组来自动约束

NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide];    //withFixedSpacing: 每个view中间的间距    //leadSpacing: 左最开始的间距    //tailSpacing:; 右边最后的的间距    [buttonArrayOne mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:15 leadSpacing:15 tailSpacing:15];    [buttonArrayOne mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.equalTo(@(selfHeight - (buttonHeight * 5 + 110)));        make.height.equalTo(@(buttonHeight));    }];

对最后一行单独处理

 [_buttonZero mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.equalTo(@15);        make.top.equalTo(@(selfHeight - (buttonHeight + 50)));        make.width.equalTo(@(buttonWidth * 2 + 15));        make.height.equalTo(@(buttonHeight));    }];        [_buttonZero.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.equalTo(_buttonOne.titleLabel);    }];    //使0的数字对齐

计算部分:

+ (Result)CalculateFor:(char*) formula andLen: (long) length {    Result result = {0, 0.0f};    int numberOfDots = 0;    int index;    int digitsNum = 0;    float digits[CALCULATE_MAX_DIGITS];    memset(digits, 0, sizeof(digits));    int optNum = 0;    char operator[CALCULATE_MAX_OPERATOR];    memset(operator, 0, sizeof(operator));    int digitNum = 0;    char digit[CALCULATE_MAX_DIGIT];    memset(digit, 0, sizeof(digit));    char *p = formula;    while (length--) {        switch (*p) {            case '+':            case '-':            case '*':            case '/':                numberOfDots = 0;                if (0 == digitNum && '-' == *p) {                    digit[digitNum++] = *p;                } else {                    if (-1 == digitNum) {                        //刚计算过括号,符号前可以没有数字读入                    } else if (0 == digitNum || CALCULATE_MAX_DIGITS == digitsNum - 1) {                        result.error = CALCULATE_ERR;                        return result;                    } else {                        digits[digitsNum++] = atof(digit);                        memset(digit, '\0', sizeof(digit));                    }                    digitNum = 0;                    operator[optNum++] = *p;                }                break;            case '(': {                char *pointer_son;                int ExistEnd = 0;                pointer_son = ++p;                while(length--) {                    if ('(' == *p) {                        ExistEnd--;                    } else if (')' == *p) {                        ExistEnd++;                    }                    if (1 == ExistEnd) {                        break;                    }                    p++;                }                Result result_son = [self CalculateFor:pointer_son andLen:p - pointer_son];                if (CALCULATE_ERR == result_son.error) {                    result.error = result_son.error;                    return result;                }                digits[digitsNum++] = result_son.value;                memset(digit, 0, sizeof(digit));                digitNum = -1;                break;            }            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':            case '.':                digit[digitNum++] = *p;                if (numberOfDots == 0 && *p == '.') {                    numberOfDots = 1;                } else if (numberOfDots == 1 && *p == '.') {                    result.error = CALCULATE_ERR;                    return result;                }                break;            default:                result.error = CALCULATE_ERR;                return result;        }        if (0 == length && 0 < digitNum) {            digits[digitsNum++] = atof(digit);            memset(digit, 0, sizeof(digit));            digitNum = 0;        }        p ++;    }    if (digitsNum != optNum + 1) {        result.error = CALCULATE_ERR;        return result;    }    for (index = 0; index < optNum; index ++) {        if ('*' == operator[index]) {            digits[index + 1] = digits[index] * digits[index + 1];            digits[index] = 0;            operator[index] = '?';        } else if ('/' == operator[index]) {            if (digits[index + 1] == 0) {                result.error = CALCULATE_ERR;                return result;            }            digits[index + 1] = digits[index] / digits[index + 1];            digits[index] = 0;            operator[index] = '?';        }    }    for (index = 0; index < optNum; index ++) {        if ('?' == operator[index]) {            if (0 == index) {                operator[index] = '+';            } else {                operator[index] = operator[index - 1];            }        }    }    result.value = digits[0];    for (index = 0; index < optNum; index ++) {        if ('+' == operator[index]) {            result.value += digits[index + 1];        } else if ('-' == operator[index]) {            result.value -= digits[index + 1];        }    }    return result;}

感谢各位的阅读,以上就是"iOS开发如何实现计算器功能"的内容了,经过本文的学习后,相信大家对iOS开发如何实现计算器功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0