如何强迫Mathematica用我指定的分母显示理性?

时间:2011-04-08 19:40:44

标签: wolfram-mathematica

我想编写一个函数来强制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

4 个答案:

答案 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)]

addition, multiplication, division

答案 3 :(得分:0)

sakra示例的替代方法是将值存储在string:

setDenominator[x_, d_] := ToString[x d] <> "/" <> ToString[d];