我几周前开始使用maxima
(实际上我刚使用过几次)和OS X的wxMaxima
界面。
我试图在网上找到解决方案,但也许是因为我是盲人,或者因为我在maxima的官方文档中没有太多经验,所以我还没有找到具体的解决方案。 / p>
如何将数字近似为n
小数位数?例如,如果我使用float(22/7)
,它会给我这个巨大的数字3.142857142857143
,但我只是想要将其近似到第3个小数位3.143
。
答案 0 :(得分:4)
fpprec
控制千里马bigfloat中的实际有效位数。这仅适用于bigfloats而不适用于普通(固定精度,IEEE 754)浮点数。
另请参阅fpprintprec
,它控制打印的位数,适用于bigfloats和普通浮点数。所以另一个解决方案是:
(%i1) fpprintprec : 4 $
(%i2) float (22/7);
(%o2) 3.143
答案 1 :(得分:2)
一种选择是定义
decimal_places(ex,n):=parse_string(printf(false,sconcat("~,",n,"f"),ex));
E.g。
decimal_places(22/7,4);
但是,要注意通过将十进制数表示为二进制浮点数而引起的数字舍入(内部)。
E.g。
printf(false,"~,1f",1.45);
返回1.4
printf(false,"~,3f",0.0145);
返回0.015。
这不是银行家'四舍五入(顺便说一下"回合"顺便说一下......
将round(1.5);
与round(2.5);
进行比较。
答案 2 :(得分:1)
我没有找到使用float
近似数字的方法,但我找到了一种使用bfloat
近似的方法。
bfloat(expr)
将
expr
中数字的所有数字和函数转换为bigfloat 数字。生成的 bigfloats 中的有效位数 由全局变量fpprec
指定。
因此,通过使用类似的东西,我可以或多或少地实现我想要的东西:
bfloat(%e), fpprec:4;
输出是:
2.718b0
如果有人知道如何使用float
功能,请发布。
答案 3 :(得分:0)
rnddp(x,dp):=float((round(x*10^dp)/10^dp));
rndcdp(z,dp):=rnddp(realpart(z),dp)+%i*rnddp(imagpart(z),dp);
rnddp
将其第一个参数舍入到第二个参数中提供的小数位数。
rndcdp
对复数也一样。
结果是近似值,而不仅仅是显示值。