/**
* 定义运算符
*/
public static List<String> lc = new ArrayList<String>();
static {
lc.add("+");
lc.add("-");
lc.add("*");
lc.add("/");
}
/**
* 四则运算表达式处理.
* @param str
* @return String
*/
public Double szys(String gs) {
gs = gs + "+0"; // 因为下面的计算是遇到符号才进行,所以多加入一个计算符号,不影响值.
String c1 = "";// 第一个运算符号
String c2 = "";// 第二个运算符号
String s1 = "";// 第一个运算数
String s2 = "";// 第二个运算数
String s3 = "";// 第三个运算数
int len = gs.length();
for (int i = 0; i < len; i++) {
String s = String.valueOf(gs.charAt(i));// 获得该位置字符并转换成字符串做比较
if (lc.contains(s)) { // 如果是运算符号
if (c1.length() == 0)// 如果第一个运算符号为空,加入
c1 = s;
else if (c2.length() == 0) {// 否则,如果第二个运算符号为空,加入
c2 = s;// 第二个运算符号
if ("+".equals(c2) || "-".equals(c2)) {// 如果第二个运算符号级别低,那么进行计算
s1 = _4zys(s1, c1, s2);// 第一个和第二个数计算
c1 = c2;// 保存第二个运算符,其他为空
c2 = "";
s2 = "";
}
} else {// 上述都保存过
if ("+".equals(s) || "-".equals(s)) {// 如果第三个运算符级别低,进行运算
s2 = _4zys(s2, c2, s3);// 先算第二三个数,保存至第二个
s1 = _4zys(s1, c1, s2);// 再算第一二个,保存至第一个
c1 = s;// 保存当前运算符,其他为空
s2 = "";
c2 = "";
s3 = "";
} else {// 如果第三个运算符级别高
s2 = _4zys(s2, c2, s3);// 先算第二三个数,保存至第二个
c2 = s;// 前面不动,保存运算符
s3 = "";
}
}
} else if (s1.length() > 0 && c1.length() > 0 && c2.length() == 0) {// 如果第一个数,第一个运算符已保存,第二个运算符未保存,保存第二个数
s2 += s;
} else if (c1.length() == 0) {// 如果没有运算符,保存第一个数
s1 += s;
} else if (s1.length() > 0 && s2.length() > 0 && c1.length() > 0
&& c2.length() > 0) {// 如果第一二个数和运算符都有,保存第三个数
s3 += s;
}
}
return Double.valueOf(s1);
}
/**
* 基本四则运算.
* @param c1
* 运算数1.
* @param s1
* 运算符(加减乘除).
* @param c2
* 运算数2.
* @return String
*/
public String _4zys(String c1, String s1, String c2) {
String reval = "0";
try {
double ln = Double.valueOf(c1).doubleValue();
double rn = Double.valueOf(c2).doubleValue();
if ("+".equals(s1)) {
return (ln + rn) + "";
} else if ("-".equals(s1)) {
return (ln - rn) + "";
} else if ("*".equals(s1)) {
return (ln * rn) + "";
} else if ("/".equals(s1)) {
if (rn == 0)
return reval;
else
return (ln / rn) + "";
}
} catch (Exception e) {
} finally {
}
return reval;
}
/**
* 公式计算.
* @param price
* @param expressions
* 传入参数票价以及计算公式.
* @return
* 返回票价.
*/
public Integer count(String price, String expressions) {
// 验证表达式是否符合规范.
String temp = "";
// 获取票价后面字符.
if (expressions.length() != (expressions.indexOf("X") + 1)) {
temp = String.valueOf(expressions
.charAt(expressions.indexOf("X") + 1));
}
if (expressions.length() == (expressions.indexOf("X") + 1)
|| "+".equals(temp) || "-".equals(temp) || "*".equals(temp)
|| "/".equals(temp)) {
// 将票价丢到表达式中去.
expressions = expressions.replace("X", price);
// 调用计算方法.
Double b = szys(expressions);
// 进行四舍五入.
int c = Integer.parseInt(b.toString().substring(0,
b.toString().indexOf(".")));
int e = (Integer.parseInt(b.toString().substring(
b.toString().indexOf(".") + 1,
b.toString().indexOf(".") + 2)) > 4) ? 1 : 0;
return c + e;
} else {
System.out.println("不规范.");
}
return 0;
}
调用测试:
String a = "X*0.97+10";
System.out.println(szys("450", a));
打印结果为:447
分享到:
相关推荐
在信息检索和计算生物学等领域的快速发展背景下,允许错误存在的字符串匹配(Approximate String Matching)技术变得越来越重要。本文将重点介绍在线搜索技术和编辑距离(Edit Distance),并探讨其问题背景、统计...
7. 部署和测试:完成上述步骤后,将自定义公式部署到EAS系统,并进行测试,验证公式能否正确执行和返回预期结果。 通过这样的方式,企业能够根据自身的业务需求定制独特的取数公式,提高预算编制的灵活性和准确性,...
例如,它依赖于JavaScript引擎,这意味着所有的公式必须符合JavaScript语法,并且可能存在一些性能和安全问题,因为JavaScript引擎并不是为了执行计算密集型任务而设计的。对于更复杂的数学表达式或者需要更高效执行...
当字符串不为空时,字符串的总大小可以通过以下公式计算:`8 * ((n*2) + 43) / 8`,其中`n`是字符串的长度。 在上述案例中,一个300MB的CSV文件被分析,预期每个单词平均15个字母,因此每个单词占用75字节。如果...
- **题目6**: 编写一个程序,根据给定的数学公式计算结果。 - 当`xx 时,`Y = 3x - 2`; - 当`1 时,`Y = 4x`; - 当`x >= 10`时,`Y = 4x`。 - **题目7**: 计算序列`S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)`的...
这个名为“公式解析程序”的项目是由C++语言实现的,它允许用户输入数学表达式,并返回计算结果。下面我们将详细探讨这个程序所涉及的知识点,以及如何利用C++进行公式解析。 1. **字符串处理**:程序的核心是解析...
面积计算公式是:面积 = 长 * 宽。 ```csharp int area = length * width; ``` 最后,我们需要将结果展示给用户。C#的`Console.WriteLine()`方法可以用于此目的。 ```csharp Console.WriteLine($"长方形的面积是...
1. 最长公共子序列求解:将两个字符串放到两个字符型数组中,characterString1 和 characterString2,当characterString1[m]= characterString2[m]时,找出这两个字符串m 之前的最长公共子序列,然后在其尾部加上...
在表达式中可以记述常量、变量、计算公式等。 总结来说,雅马哈的编程环境支持多种变量类型和结构,从基础的数值型和字符型变量到数组,再到变量赋值,都是编程中常用的基础知识。正确的理解和使用这些变量类型和...
然后根据输入的值创建`Circle`对象,并调用相应的方法计算和输出结果。 ```java public static void main(String[] args) { String input = JOptionPane.showInputDialog("请输入圆的半径:"); double radius = ...
"ExpressionParser:计算数学表达式字符串"是一个专为解析数学表达式字符串而设计的程序,它利用有限状态机(Finite State Machine, FSM)的概念来处理输入的表达式并得出计算结果。在这里,我们将深入探讨这个程序...
在TB数据与公式运行的关系中,我们首先理解到基础数据源是Bar数据,它构成了所有公式计算的基础。TBL基础知识中,Bar数据被分为Data0到Data49这50个数据源,其中Data0代表原始图表的Bar数据,Data1至Data49则可以...
本实验中的Java Bean类名为Equation,具有a、b、c三个double型成员变量来存储系数,以及rootOne和rootTwo两个String型成员变量存储方程的根。还有一个boolean型成员变量squareEquation,用来标识方程是否为二次方程...
21. 完全二叉树的叶子节点数计算公式为n0 = (n+1)/2,其中n是总节点数。对于699个节点的完全二叉树,叶子节点数为350。 22. 后序遍历二叉树的顺序是左子树-右子树-根节点,所以给定的二叉树后序遍历结果是DEBFCA。 ...
在这个问题中,我们被要求计算一个特定的数学序列,即求和公式"1¹ + 2² + 3³ + …… + 20的20次方"。这个任务可以通过编程语言来实现,例如Java,它是一种广泛应用的面向对象的编程语言,NetBeans则是一个流行的...
* 设计一个Contractor类,该类从Employee类派生,具有工作结束时间属性,重写计算总薪水(Salary)的方法(comSalary),计算公式为Salary=basicSalary+(工作结束时间-参加工作时间)*15。 其他 * 使用字符串其他...
本文将介绍热电偶转换的C语言程序,包括S型、R型、B型和K型温度转电压系数的计算。 首先,让我们了解热电偶的基本原理。热电偶是一种温度传感器,它可以将温度信号转换为电压信号。热电偶的工作原理是基于热电效应...
- `getCircle()`方法用于计算矩形的周长,其公式为`2 * (长 + 宽)`。 - `getArea()`方法用于计算矩形的面积,其公式为`长 * 宽`。 这两个方法都是公共的(`public`),并且返回值类型均为`float`,这表明它们各自...
首先,矩阵向量乘法是线性代数中的基本运算,其计算公式为 `y = Ax`,其中 `A` 是一个矩阵,`x` 是一个向量,`y` 是结果向量。在单个处理器上,这个操作相对简单,但对于大型矩阵,计算量巨大,可能会成为性能瓶颈。...
此外,如果你的Excel文件包含公式,Apache POI会自动计算公式的值。如果需要保留公式而不是结果,你可以设置`cell.setCellFormula(formula)`。 总结一下,要使Java代码兼容读取2003和2007版的Excel文件,需引入...