String型计算公式,给结果

本文介绍了一种处理和计算四则运算表达式的方法。通过定义运算符,并使用字符串处理和条件判断实现了复杂的运算表达式的解析与计算。此外,还提供了一个具体的例子,展示了如何根据票价和特定的数学表达式来计算最终价格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



/**
* 定义运算符
*/
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
在Java中,可以使用Apache POI库来读取Excel(.xls或.xlsx)文件,并处理其中的数据,包括计算公式。POI是一个流行的用于Microsoft Office文档操作的开源库。以下是一般的步骤: 1. 添加依赖:首先,在你的项目中引入Apache POI的`poi`和`poi-ooxml`库。 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>最新版本号</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>最新版本号</version> </dependency> ``` 2. 创建Workbook对象:通过`FileInputStream`打开Excel文件,创建`XSSFWorkbook`(.xls)或`XLSXSSFWorkbook`(.xlsx)。 ```java FileInputStream fis = new FileInputStream(new File("path_to_your_file.xls")); Workbook workbook = new XSSFWorkbook(fis); ``` 3. 选择Sheet:如果你的Excel有多张工作表,需要指定你想处理哪一张。 ```java Sheet sheet = workbook.getSheetAt(0); // 0是第一张工作表 ``` 4. 遍历行和单元格:使用`Row`和`Cell`类来访问和处理数据。例如,检查是否是公式单元格并计算结果: ```java for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellType() == CellType.CALCULATED) { // 检查是否为公式 String formulaString = cell.getCellFormula(); try { double result = cell.getNumericCellValue(); // 如果是数值公式,直接获取结果 System.out.println("公式:" + formulaString + " 结果:" + result); } catch (Exception e) { // 处理公式错误 System.out.println("公式出错:" + formulaString); } } } } ``` 5. 关闭资源:记得在完成所有操作后关闭流和workbook。 ```java fis.close(); workbook.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值