我想编写一个函数来强制Mathematica在我指定的分母中显示有理数。例如,具有指定分母 6 的理性 2/3 应变为 4/6 。
我尝试使用HoldForm[]
或Unevaluated[]
,但没有成功。
In[1]:= setDenominator[x_, d_] := Unevaluated[Rational[x*d, d]];
In[2]:= setDenominator[2/3, 6]
2
Out[2]= -
3
答案 0 :(得分:6)
您可以FractionBox使用DisplayForm:
setDenominator[x_, d_] := DisplayForm[FractionBox[x*d, d]]
答案 1 :(得分:4)
HoldForm
有效,但您必须偷偷摸摸才能获得x*d
的数值
setDenominator[x_, d_] := HoldForm@Rational[foo, d] /. foo -> x*d
可以通过添加一些d
的适用性检查来改进。
答案 2 :(得分:4)
这是sakra的想法的变体,允许添加和乘法......
Format[setDenominator[x_, d_]] := DisplayForm@FractionBox[x*d, d]
setDenominator /: Plus[left___, setDenominator[x1_, d1_], right___] := left + x1 + right;
setDenominator /: Times[left___, setDenominator[x1_, d1_], right___] :=left*x1*right;
尝试一下:
a = setDenominator[3/5, 10];
Print[a, " + ", 2/3, " = " , a + 2/3]
Print[a, " + ", 2/3, " = " , setDenominator[a + 2/3, 30]]
Print[a, " × ", 2/3, " = " , a * 2/3]
Print[a, " × ", 2/3, " = " , setDenominator[a * 2/3, 30]]
Print[a, " ÷ ", 2/3, " = " , a /( 2/3)]
答案 3 :(得分:0)
sakra
示例的替代方法是将值存储在string:
setDenominator[x_, d_] := ToString[x d] <> "/" <> ToString[d];