提升四则运算精度的方法、系统、电子设备及存储介质技术方案

技术编号:36297042 阅读:13 留言:0更新日期:2023-01-13 10:11
本发明专利技术提供一种提升四则运算精度的方法、系统、电子设备及存储介质,属于数据处理技术领域。所述方法包括读取json文件中的表达式信息,判断表达式信息中是否存在四则运算表达式的标识;若是,则将四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一运算符的逆波兰式字符串;当遇到第一运算符时,判断第一运算符相邻两所述运算数是否具有小数位;若是,则根据预设精度运算规则针对逆波兰式数组进行循环遍历计算,以输出四则运算表达式对应的运算结果。通过本申请可以有效解决因原生js计算对double类型的运算数进行四则运算就存在精度丢失导致出现数据错误的问题。的问题。的问题。

【技术实现步骤摘要】
提升四则运算精度的方法、系统、电子设备及存储介质


[0001]本专利技术属于数据处理
,具体地涉及一种提升四则运算精度的方法、系统、电子设备及存储介质。

技术介绍

[0002]js在四则运算表达式计算时出现精度丢失问题,诸如四则运算表达式6.7*(1+1.5/100)的实际结果为6.8005,而用原生js计算出来的结果为6.8004999999999995。究其原因是因原生js计算对double类型的运算数进行四则运算就存在精度丢失,导致出现数据错误的问题,无法满足高精度计算要求。
[0003]因此,如何解决js计算四则运算表达式存在的精度丢失问题,是亟待解决的课题。

技术实现思路

[0004]为了解决上述技术问题,本专利技术提供了一种提升四则运算精度的方法、系统、电子设备及存储介质。
[0005]第一方面,本申请提供一种提升四则运算精度的方法,包括:读取json文件中的表达式信息,判断所述表达式信息中是否存在四则运算表达式的标识;若是,则将所述四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一运算符的逆波兰式字符串;其中,所述第一运算符指算术运算符;当遇到所述第一运算符时,判断所述第一运算符相邻两所述运算数是否具有小数位;若是,则根据预设精度运算规则针对所述逆波兰式数组进行循环遍历计算,以输出所述四则运算表达式对应的运算结果;若否,则直接采用四则运算规则针对所述四则运算表达式进行计算,以输出所述四则运算表达式对应的运算结果。
[0006]较佳地,所述将所述四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一算术运算符的逆波兰式字符串的步骤具体包括:将所述四则运算表达式的中缀表达式按照运算符切割成包括运算数和第二运算符的字符组,其中,所述第二运算符包括括号和算术运算符;初始化一个操作符栈和一个运算数数组;根据预设转换规则从左至右依序遍历所述字符组,直至完成后将所述操作符栈中剩余的运算符依次输出至所述运算数数组中,以使在所述运算数数组中形成所述逆波兰式字符串。
[0007]较佳地,所述预设转换规则具体包括:当遇到所述运算数时,将所述运算数输入至所述运算数数组中;当遇到所述第二运算符的算术运算符时,比较所述第二运算符的算术运算符与所
述操作符栈中栈顶的运算符优先级:若所述操作符栈中为空或栈顶为左括号或优先级高,则直接所述第二运算符的算术运算符输入至所述操作符栈中;反之,则将所述操作符栈中的运算符输出至所述运算数数组中,循环直至所述操作符栈中的运算符优先级比当前所述第二运算符的算术运算符小;当遇到所述第二运算符的括号时,若是左括号则直接输入至所述操作符栈中;若是右括号则弹出所述操作符栈栈顶的运算符,并输出至所述运算数数组中直至遇到左括号为至形成一对括号,与此同时将所述一对括号丢弃。
[0008]较佳地,所述根据预设精度运算规则针对所述逆波兰式数组进行循环遍历计算,以输出所述四则运算表达式对应的运算结果的步骤具体包括:获取相邻两所述运算数对应的小数数位;基于所述小数数位以及所述第一运算符的类型,并根据预设精度运算规则分别针对两相邻运算数进行扩容及缩小处理,以获取所述四则运算表达式对应的运算结果。
[0009]较佳地,所述预设精度运算规则具体包括:若遇到的所述第一运算符为加法运算符及减法运算符时,则获取相邻两所述运算数中的最小小数位数,分别对相邻两所述运算数乘以所述最小小数位数所对应的扩容倍数进行扩容,扩容完成后计算出对应结果再将所述对应结果除以所述扩容倍数;若遇到的所述第一运算符为乘法运算符及除法运算符时,则将相邻两所述运算数分别乘以其对应所述小数位数所对应的扩容倍数进行扩容,扩容完成后计算出对应结果再将所述对应结果除以相邻两所述运算数对应扩容倍数之积。
[0010]较佳地,所述扩容倍数是指将所述运算数中的小数位变成整数所需乘的倍数。
[0011]较佳地,所述读取json文件中的表达式信息,判断所述表达式信息中是否存在四则运算表达式的标识的步骤之后,所述方法还包括:若判断所述表达式信息中不存在四则运算表达式的标识,则调用与所述表达式信息相对应的解析引擎针对所述表达式信息中进行处理,以输出所述四则运算表达式对应的运算结果。
[0012]第二方面,本申请提供一种提升四则运算精度的系统,包括:第一判断模块,用于读取json文件中的表达式信息,判断所述表达式信息中是否存在四则运算表达式的标识;类型转换模块,用于若判断所述表达式信息中存在四则运算表达式的标识,则将所述四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一运算符的逆波兰式字符串;其中,所述第一运算符指算术运算符;第二判断模块,用于当遇到所述第一运算符时,判断所述第一运算符相邻两所述运算数是否具有小数位;遍历计算模块,用于若判断所述第一运算符相邻两所述运算数具有小数位,则根据预设精度运算规则针对所述逆波兰式数组进行循环遍历计算,以输出所述四则运算表达式对应的运算结果;第一计算模块,用于若判断所述第一运算符相邻两所述运算数不具有小数位,则直接采用四则运算规则针对所述四则运算表达式进行计算,以输出所述四则运算表达式对应的运算结果。
[0013]较佳地,所述类型转换模块包括:字符切割单元,用于将所述四则运算表达式的中缀表达式按照运算符切割成包括运算数和第二运算符的字符组,其中,所述第二运算符包括括号和算术运算符;初始化单元,用于初始化一个操作符栈和一个运算数数组;依序遍历单元,用于根据预设转换规则从左至右依序遍历所述字符组,直至完成后将所述操作符栈中剩余的运算符依次输出至所述运算数数组中,以使在所述运算数数组中形成所述逆波兰式字符串。
[0014]较佳地,所述遍历计算模块包括:获取单元,用于获取相邻两所述运算数对应的小数数位;精度计算单元,用于基于所述小数数位以及所述第一运算符的类型,并根据预设精度运算规则分别针对两相邻运算数进行扩容及缩小处理,以获取所述四则运算表达式对应的运算结果。
[0015]较佳地,所述系统还包括:第二计算模块,用于若判断所述表达式信息中不存在四则运算表达式的标识,则调用与所述表达式信息相对应的解析引擎针对所述表达式信息中进行处理,以输出所述四则运算表达式对应的运算结果。
[0016]第三方面,本申请提供了一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的提升四则运算精度的方法。
[0017]第四方面,本申请提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的提升四则运算精度的方法。
[0018]相比于现有技术,本申请提供的一种提升四则运算精度的方法、系统、电子设备及存储介质,通过判断从json文件中读取的表达式信息中是否存在四则运算表达式的标识,做出相应的选择:若否则调用与表达式信息相对应的解析引擎以输出所述四则运算表达式对应的运算结果;若是则将四则运算表达式的中缀表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种提升四则运算精度的方法,其特征在于,包括:读取json文件中的表达式信息,判断所述表达式信息中是否存在四则运算表达式的标识;若是,则将所述四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一运算符的逆波兰式字符串;其中,所述第一运算符指算术运算符;当遇到所述第一运算符时,判断所述第一运算符相邻两所述运算数是否具有小数位;若是,则根据预设精度运算规则针对所述逆波兰式数组进行循环遍历计算,以输出所述四则运算表达式对应的运算结果;若否,则直接采用四则运算规则针对所述四则运算表达式进行计算,以输出所述四则运算表达式对应的运算结果。2.根据权利要求1所述的提升四则运算精度的方法,其特征在于,所述将所述四则运算表达式的中缀表达式类型转换成后缀表达式类型,获取包括运算数和第一算术运算符的逆波兰式字符串的步骤具体包括:将所述四则运算表达式的中缀表达式按照运算符切割成包括运算数和第二运算符的字符组,其中,所述第二运算符包括括号和算术运算符;初始化一个操作符栈和一个运算数数组;根据预设转换规则从左至右依序遍历所述字符组,直至完成后将所述操作符栈中剩余的运算符依次输出至所述运算数数组中,以使在所述运算数数组中形成所述逆波兰式字符串。3.根据权利要求2所述的提升四则运算精度的方法,其特征在于,所述预设转换规则具体包括:当遇到所述运算数时,将所述运算数输入至所述运算数数组中;当遇到所述第二运算符的算术运算符时,比较所述第二运算符的算术运算符与所述操作符栈中栈顶的运算符优先级:若所述操作符栈中为空或栈顶为左括号或优先级高,则直接所述第二运算符的算术运算符输入至所述操作符栈中;反之,则将所述操作符栈中的运算符输出至所述运算数数组中,循环直至所述操作符栈中的运算符优先级比当前所述第二运算符的算术运算符小;当遇到所述第二运算符的括号时,若是左括号则直接输入至所述操作符栈中;若是右括号则弹出所述操作符栈栈顶的运算符,并输出至所述运算数数组中直至遇到左括号为至形成一对括号,与此同时将所述一对括号丢弃。4.根据权利要求1所述的提升四则运算精度的方法,其特征在于,所述根据预设精度运算规则针对所述逆波兰式数组进行循环遍历计算,以输出所述四则运算表达式对应的运算结果的步骤具体包括:获取相邻两所述运算数对应的小数数位;基于所述小数数位以及所述第一运算符的类型,并根据预设精度运算规则分别针对两相邻运算数进行扩容及缩小处理,以获取所述四则运算表达式对应的运算结果。5.根...

【专利技术属性】
技术研发人员:于雪李多彭中辉丁建春
申请(专利权)人:江西博微新技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1