合理化数值输出

500*_*500 7 wolfram-mathematica

考虑:

Grid@Partition[
     Text[Style[ToString[Range[0, 180, 22.5][[#]]] <> "\[Degree]", Bold, 16,
          GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何摆脱整数之后的点?

Dav*_*idC 10

如果在合理化数字时数字变为整数,请使用整数; 否则坚持原始号码.这是通过一个简单的功能实现的f[x]:

f[x_] := If[IntegerQ[n = Rationalize[x]], n, x]
Run Code Online (Sandbox Code Playgroud)

测试...

f[67.5]
f[0.]
f[45.]

(* Out  *)
67.5
0
45
Run Code Online (Sandbox Code Playgroud)

您不能只是Rationalize所有的值,如下所示:

理顺

要查看它在您的情况下是如何工作的,只需(f/@)在代码中插入以重新格式化以下输出的值Range:

Grid@Partition[
Text[Style[
  ToString[(f/@ Range[0, 180, 22.5])[[#]]] <> "\[Degree]", 
  Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Run Code Online (Sandbox Code Playgroud)

所以

临时工

  • @ 500 N @ Rationalize @ <任意数字>并没有完全解决它,因为`N`通过将整数(由`Rationalize`返回)转换回实数来撤销结果!例如`N [Rationalize [45.]]`返回"45".作为结果. (4认同)

小智 9

虽然原始问题没有指数的任何数字,但一般来说使用NumberForm最安全如下:

trimPoint[n_] := 
NumberForm[n, 
 NumberFormat -> (DisplayForm@
  RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, 
    If[#3 != "", {
      "\[Times]", SuperscriptBox[#2, #3]}, {}]]
   ] &)]
Run Code Online (Sandbox Code Playgroud)

然后你只需要通过插入// trimPoint来修改原始代码,如下所示:

Grid@Partition[
 Text[Style[
  ToString[Range[0, 180, 22.5][[#]] // trimPoint] <> "\[Degree]", 
  Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Run Code Online (Sandbox Code Playgroud)


tom*_*omd 6

另一种可能性是不首先产生它们.

If[IntegerQ[#], #, N@#] & /@ Range[0, 180, 45/2]
Run Code Online (Sandbox Code Playgroud)

{0,22.5,45,67.5,90,112.5,135,157.5,180}


abc*_*bcd 5

一般来说,你应该使用Rationalize.

Rationalize@10.
Out[1] = 10
Run Code Online (Sandbox Code Playgroud)

但是在你的情况下,你不应该简单地使用Rationalize,因为你不想对某些元素进行操作.这是一个简单的方法,可以做你想要的.

list = Range[0, 180, 22.5] /. (x_ /; FractionalPart@x == 0.) -> 
   IntegerPart@x
Grid@Partition[
  Text[Style[ToString[list[[#]]] <> "\[Degree]", Bold, 16, 
      GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

上面的代码产生相同的列表作为你的,然后有条件地替换那些具有元素FractionalPart等于0.(例如,10.),其IntegerPart(例如10).

  • 别客气.二进制表示意味着需要使用IntegerPart和FractionalPart进行处理,例如`x = 6250*0.292; {x,IntegerPart [x],IntegerPart [Round [x,10.^ - 6]]}`产生{1825.,1824,1825} (2认同)