`
fable0618
  • 浏览: 47615 次
  • 性别: Icon_minigender_2
  • 来自: 火星
文章分类
社区版块
存档分类

String型计算公式,给结果

阅读更多

/**
	 * 定义运算符
	 */
	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
分享到:
评论

相关推荐

    String Matching

    在信息检索和计算生物学等领域的快速发展背景下,允许错误存在的字符串匹配(Approximate String Matching)技术变得越来越重要。本文将重点介绍在线搜索技术和编辑距离(Edit Distance),并探讨其问题背景、统计...

    金蝶EAS增加自定义取数公式范例.pdf

    7. 部署和测试:完成上述步骤后,将自定义公式部署到EAS系统,并进行测试,验证公式能否正确执行和返回预期结果。 通过这样的方式,企业能够根据自身的业务需求定制独特的取数公式,提高预算编制的灵活性和准确性,...

    java把字符串转化成公式计算的示例

    例如,它依赖于JavaScript引擎,这意味着所有的公式必须符合JavaScript语法,并且可能存在一些性能和安全问题,因为JavaScript引擎并不是为了执行计算密集型任务而设计的。对于更复杂的数学表达式或者需要更高效执行...

    String 优化

    当字符串不为空时,字符串的总大小可以通过以下公式计算:`8 * ((n*2) + 43) / 8`,其中`n`是字符串的长度。 在上述案例中,一个300MB的CSV文件被分析,预期每个单词平均15个字母,因此每个单词占用75字节。如果...

    简单JAVA设计题目

    - **题目6**: 编写一个程序,根据给定的数学公式计算结果。 - 当`xx 时,`Y = 3x - 2`; - 当`1 时,`Y = 4x`; - 当`x &gt;= 10`时,`Y = 4x`。 - **题目7**: 计算序列`S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)`的...

    公式解析程序

    这个名为“公式解析程序”的项目是由C++语言实现的,它允许用户输入数学表达式,并返回计算结果。下面我们将详细探讨这个程序所涉及的知识点,以及如何利用C++进行公式解析。 1. **字符串处理**:程序的核心是解析...

    C#计算长方形面积C#计算长方形面积

    面积计算公式是:面积 = 长 * 宽。 ```csharp int area = length * width; ``` 最后,我们需要将结果展示给用户。C#的`Console.WriteLine()`方法可以用于此目的。 ```csharp Console.WriteLine($"长方形的面积是...

    最长公共子序列实验报告.pdf

    1. 最长公共子序列求解:将两个字符串放到两个字符型数组中,characterString1 和 characterString2,当characterString1[m]= characterString2[m]时,找出这两个字符串m 之前的最长公共子序列,然后在其尾部加上...

    yamaha雅马哈变量.pdf

    在表达式中可以记述常量、变量、计算公式等。 总结来说,雅马哈的编程环境支持多种变量类型和结构,从基础的数值型和字符型变量到数组,再到变量赋值,都是编程中常用的基础知识。正确的理解和使用这些变量类型和...

    定义一个圆类circle,它有一个变量radius(半径)。从键盘输入数据,通过构造函数的参数传递给radius,编程计算并输出圆的的周长和面积。但是,必须确保输入的数据不为复数。

    然后根据输入的值创建`Circle`对象,并调用相应的方法计算和输出结果。 ```java public static void main(String[] args) { String input = JOptionPane.showInputDialog("请输入圆的半径:"); double radius = ...

    ExpressionParser:计算数学表达式字符串

    "ExpressionParser:计算数学表达式字符串"是一个专为解析数学表达式字符串而设计的程序,它利用有限状态机(Finite State Machine, FSM)的概念来处理输入的表达式并得出计算结果。在这里,我们将深入探讨这个程序...

    TB数据与公式运行关系概况.pptx

    在TB数据与公式运行的关系中,我们首先理解到基础数据源是Bar数据,它构成了所有公式计算的基础。TBL基础知识中,Bar数据被分为Data0到Data49这50个数据源,其中Data0代表原始图表的Bar数据,Data1至Data49则可以...

    jsp计算一元二次方程的根

    本实验中的Java Bean类名为Equation,具有a、b、c三个double型成员变量来存储系数,以及rootOne和rootTwo两个String型成员变量存储方程的根。还有一个boolean型成员变量squareEquation,用来标识方程是否为二次方程...

    2021-2022计算机二级等级考试试题及答案No.13812.docx

    21. 完全二叉树的叶子节点数计算公式为n0 = (n+1)/2,其中n是总节点数。对于699个节点的完全二叉树,叶子节点数为350。 22. 后序遍历二叉树的顺序是左子树-右子树-根节点,所以给定的二叉树后序遍历结果是DEBFCA。 ...

    计算:1¹+2²+3³+……+20的20次方

    在这个问题中,我们被要求计算一个特定的数学序列,即求和公式"1¹ + 2² + 3³ + …… + 20的20次方"。这个任务可以通过编程语言来实现,例如Java,它是一种广泛应用的面向对象的编程语言,NetBeans则是一个流行的...

    java.pt.pdf

    * 设计一个Contractor类,该类从Employee类派生,具有工作结束时间属性,重写计算总薪水(Salary)的方法(comSalary),计算公式为Salary=basicSalary+(工作结束时间-参加工作时间)*15。 其他 * 使用字符串其他...

    热电偶转换C语言程序.pdf

    本文将介绍热电偶转换的C语言程序,包括S型、R型、B型和K型温度转电压系数的计算。 首先,让我们了解热电偶的基本原理。热电偶是一种温度传感器,它可以将温度信号转换为电压信号。热电偶的工作原理是基于热电效应...

    JAVA语言简单实现周长面积的计算

    - `getCircle()`方法用于计算矩形的周长,其公式为`2 * (长 + 宽)`。 - `getArea()`方法用于计算矩形的面积,其公式为`长 * 宽`。 这两个方法都是公共的(`public`),并且返回值类型均为`float`,这表明它们各自...

    mpi_mat_vect_mult.rar_Mat_vect_mult

    首先,矩阵向量乘法是线性代数中的基本运算,其计算公式为 `y = Ax`,其中 `A` 是一个矩阵,`x` 是一个向量,`y` 是结果向量。在单个处理器上,这个操作相对简单,但对于大型矩阵,计算量巨大,可能会成为性能瓶颈。...

    java代码读取excel文件,同时兼容2003和2007

    此外,如果你的Excel文件包含公式,Apache POI会自动计算公式的值。如果需要保留公式而不是结果,你可以设置`cell.setCellFormula(formula)`。 总结一下,要使Java代码兼容读取2003和2007版的Excel文件,需引入...

Global site tag (gtag.js) - Google Analytics