Java 格式化数学函数
我有一大堆数学函数是从一个程序以这种格式输出的:Java 格式化数学函数,java,Java,我有一大堆数学函数是从一个程序以这种格式输出的: (704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200 我需要编
(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200
我需要编写一个脚本,将它们转换为可读的格式,如下所示:
(704253724578.0182000000000000 * ( ((sqrt(X13-X11) / (X18/X15)) /((((X1*X20)/X19)^2) * X2))/ (((X1 * X20) * (X25 / X15)) / X9)) ) + 77.2424201451314200
关于在java中实现这一点的最佳方法是什么,有什么想法吗?除了java,还有其他更好的工具吗
谢谢 安装Ruby和一个名为“sexpistol”的漂亮gem,它允许您处理s表达式 我为您破解了一个解决方案:
require 'sexpistol'
require 'pp'
exp="(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200"
parser = Sexpistol.new
tree= parser.parse_string(exp)
SYM={
:".*" => :*,
:* => :*,
:"+" => :"+",
:- => :-,
:mydivide => :/,
:square => "^2",
:mysqrt => "mysqrt"
}
def isPrefix sexp
return true if SYM[sexp.first]
return false
end
def p2i sexp
if sexp.is_a? Array
if isPrefix(sexp)
op,lhs,rhs =sexp
case op
when :square
return [p2i(lhs),SYM[op]]
when :mysqrt
return [:mysqrt,p2i(lhs)]
else
return [p2i(lhs),SYM[op],p2i(rhs)]
end
else
lhs,op,rhs=sexp
return [p2i(lhs),SYM[op],p2i(rhs)]
end
else
return sexp
end
end
pp parser.to_sexp(p2i(tree)).first
# prints : (704253724578.0182 * ((((mysqrt (X13 - X11)) / (X18 / X15)) / ((((X1 * X20) / X19) ^2) * X2)) / (((X1 * X20) * (X25 / X15)) / X9))) + 77.24242014513142
如果你写一篇论文,你可以承认我 这看起来像是一个术语代数到中缀表示法的问题,与语言无关。当使用幂/指数时,不要使用
^
字符,它不会做您认为它会做的事情。如果需要将x
提升到2
(例如x^2
),则应使用Math.pow(x,2)
。^
操作符实际上是一个.right。。。我并不是在做数学题。我只是简单地尝试格式化字符串,使其从前缀表示法转换为中缀表示法。知道如何格式化字符串吗?谢谢这只是s表达式的递归遍历问题。然后对子表达式的格式应用wright变换。感谢所有的帮助!我用堆栈来推送和弹出java中的术语,也许你可以验证答案(有效的解决方案)。谢谢!