数学中什么叫做式子式子转化

数学_高考必背公式_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数学_高考必背公式
掌门1对1在线教育主打全国top8名校师资,由...|
总评分0.0|
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩24页未读,
定制HR最喜欢的简历
你可能喜欢本文件介绍一种 转化字符串表达式为数学公式并算出结果的实用类.
/* * FormulaCalculator.java * * Created on 日, 上午11:40 * @title 转化字符串表达式为数学公式并算出结果 * @description 转化字符串表达式为数学公式并算出结果 * 注意:为了区分负号,这边使用#代替减号 * 使用方法: * FormulaCalculator calculator=new FormulaCalculator(); * calculator.getResult("10.23#20.67*(5.12+7.82)/2",2); * v1.0.0 created by chenfc * */package org.import java.math.BigDimport java.util.LinkedLimport java.util.ArrayLimport java.util.regex.Mimport java.util.regex.Ppublic class FormulaCalculator {
boolean isRightFormat = true;
String DIVISOR_EQUALS_ZERO="0.0";//除数为零时的返回值
* 为了区分负号,这边使用#代替减号
* @param formula 字符串表达式
* @return 返回公式计算结果
double getResult(String formula){
double returnValue = 0;
returnValue = doAnalysis(formula);
}catch(NumberFormatException nfe){
System.out.println("公式格式有误,请检查:" + formula);
}catch(Exception e){
e.printStackTrace();
if(!isRightFormat){
System.out.println("公式格式有误,请检查:" + formula);
return returnV
* 采用BigDecimal.ROUND_HALF_UP方式返回指定精度的运算结果
* @param formula 公式
* @param decimalPlace 要保留的小数位数
* @return 返回公式计算结果
String getResult(String formula,int decimalPlace){
return getResult(formula,decimalPlace,BigDecimal.ROUND_HALF_UP);
* 返回指定精度及舍去尾数的策略的运算结果
* @param formula 公式
* @param decimalPlace 要保留的小数位数
* @param roundMethod 舍去尾数的策略
可取值有BigDecimal.ROUND_HALF_UP BigDecimal.ROUND_HALF_DOWN祥见BigDecimal
* @return 返回公式计算结果
String getResult(String formula,int decimalPlace,int roundMethod){
double result=getResult(formula);
if(result==Double.MAX_VALUE)
return DIVISOR_EQUALS_ZERO;
return numberAround(result,decimalPlace,roundMethod);
double doAnalysis(String formula){
double returnValue = 0;
LinkedList&Integer& stack = new LinkedList&Integer&();
int curPos = 0;
String beforePart = "";
String afterPart = "";
String calculator = "";
isRightFormat = true;
while(isRightFormat&&(formula.indexOf('(') &= 0||formula.indexOf(')') &= 0)){
curPos = 0;
for(char s : formula.toCharArray()){
if(s == '('){
stack.add(curPos);
}else if(s == ')'){
if(stack.size() & 0){
beforePart = formula.substring(0, stack.getLast());
afterPart = formula.substring(curPos + 1);
calculator = formula.substring(stack.getLast() + 1, curPos);
formula = beforePart + doCalculation(calculator) + afterP
stack.clear();
System.out.println("有未关闭的右括号!");
isRightFormat = false;
if(stack.size() & 0){
System.out.println("有未关闭的左括号!");
if(isRightFormat){
returnValue = doCalculation(formula);
return returnV
* 为了区分负号,这边使用#代替减号
double doCalculation(String formula) {
ArrayList&Double& values = new ArrayList&Double&();
ArrayList&String& operators = new ArrayList&String&();
int curPos = 0;
int prePos = 0;
for (char s : formula.toCharArray()) {
if (s == '+' || s == '#' || s == '*' || s == '/') {
values.add(Double.parseDouble(formula.substring(prePos, curPos)
.trim()));
operators.add("" + s);
prePos = curPos + 1;
values.add(Double.parseDouble(formula.substring(prePos).trim()));
for (curPos = operators.size() - 1; curPos &= 0; curPos--) {
op = operators.get(curPos).charAt(0);
switch (op) {
values.add(curPos, values.get(curPos) * values.get(curPos + 1));
values.remove(curPos + 1);
values.remove(curPos + 1);
operators.remove(curPos);
if(values.get(curPos + 1).doubleValue()==0.0)//除数为零时
values.add(curPos, new Double(getDefaultValue()));
values.add(curPos, values.get(curPos) / values.get(curPos + 1));
values.remove(curPos + 1);
values.remove(curPos + 1);
operators.remove(curPos);
for (curPos = operators.size() - 1; curPos &= 0; curPos--) {
op = operators.get(curPos).charAt(0);
switch (op) {
values.add(curPos, values.get(curPos) + values.get(curPos + 1));
values.remove(curPos + 1);
values.remove(curPos + 1);
operators.remove(curPos);
values.add(curPos, values.get(curPos) - values.get(curPos + 1));
values.remove(curPos + 1);
values.remove(curPos + 1);
operators.remove(curPos);
return values.get(0).doubleValue();
* 对数字进行四舍五入
* @param dN 要四舍五入的数
* @param decimalPlace 精度
* @param roundMethod 舍去尾数的策略
可取值有BigDecimal.ROUND_HALF_UP BigDecimal.ROUND_HALF_DOWN祥见BigDecimal
String numberAround(double dN,int decimalPlace, int roundMethod){
BigDecimal bd = new BigDecimal(String.valueOf(dN));
bd = bd.setScale(decimalPlace, roundMethod);
return String.valueOf(bd);
* 对给定的字符串进行模式匹配
* @param str 要匹配的字符串
* @param regix 模式
* @return 返回匹配结果,成功为true,否则为false
boolean check(String str,String regix){
boolean result=false;
Pattern p=Pattern.compile(regix);
Matcher m =p.matcher(str);
result=m.matches();
字符串转化为数学表达式并求值(后缀表达式)
没有更多推荐了,android 的数学公式图片转换 - 漩涡鸣人 - 博客园
随笔 - 233
& & &在应用中的数学公式是不能直接以文本显示和输入的,包括在一些学习类网站上看到的公式,他们都是以gif图片的形式展示出来的。而怎么样生成各种各样的gif图片形式的数学公式呢,此处未作深入研究,我所知道的是
输入一些具有一定的规则的latex文本,然后再通过图片生成工具去解析latex字串并生成一个对应的gif公式文件。&
& & &本次Demo用到的转换服务的网站就是 &, 如果你胶转换图片的源代码(C++),那你就可以在本地完成这一工作了。
& & &可以通过这个网站上提供的公式编辑器进行公式编辑获取到gif公式图片, 也可以通过http请求的方式去获取gif图片.
& & &1、网站上的公式编辑 地址&, 就像这样
& & &左边框框里的是latex文本, 右边会同时生成的gif图片,这个编辑器能让你很快的知道公式对应的latex文本写法,比较好用啊。
& & &也可以去latex公式库里查找,根据各个字符的latex文本再拼接出来,这里给出一个链接,,在里面基本上可以找到你想要的公式的latex写法。
& & &2、现在来开始我们的demo, 让android 客户端从服务器上取gif图片。
& & &公式图片转换的请求很简单, 只要在http://latex.codecogs.com/gif.latex?后面跟上latex文本就可以了。比如&http://latex.codecogs.com/gif.latex?\tfrac{a} {ab}就能得到上述a/ab的图片了
在写url的时候一定要注意,RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。因此url不允许\{}空格等字符出现,只要出现肯定报错,而在网页里
可以出现这些字符,那是因为浏览器自动将它们进行了编码,相信你们之前也应该注意到了浏览器地址栏里出现一些类似于%20%7d这样的符号吧,那就是编码后的16进制码。所以上述url必须要进行本地编码了。
demo的关键代码如下,像xml, activity那些平常的代码就不贴出来了,这个Demo也不复杂。
private final String host = "http://latex.codecogs.com/gif.latex?";
//此处进行16进制编码,这里只做了\ {}这4个符号编码
private String encode(String url){
url = url.replace("\\", "%5c").replace(" ", "%20")
.replace("{", "%7b").replace("}", "%7d");
// 加载图片
//etLatex是输入latex文本的edittext
String latexstr = etLatex.getText().toString().trim();
String url = host +
//http请求用的是xutils3, ivMath是显示公式图片的imageview
x.image().bind(ivMath, encode(url), options, new RequestDataCallback&Drawable&() {
protected void success(Drawable drawable) {
LogUtil.e("下载成功");
protected void fail() {
LogUtil.e("下载出错," );
protected void finish() {
LogUtil.e("下载完成");
public void onCancelled(CancelledException arg0) {
LogUtil.e("下载取消");
最后来看看效果用转化的思想解决数学问题_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用转化的思想解决数学问题
阅读已结束,下载本文到电脑
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 数学式子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信