合理化数值输出

时间:2011-09-17 01:17:16

标签: wolfram-mathematica

考虑一下:

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

enter image description here

如何摆脱整数之后的点?

5 个答案:

答案 0 :(得分:10)

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

实现的
f[x_] := If[IntegerQ[n = Rationalize[x]], n, x]

...测试

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

(* Out  *)
67.5
0
45

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

rationalize

要了解它的工作原理,只需在代码中插入(f/@)即可重新格式化Range输出的值:

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

所以

temps

答案 1 :(得分:9)

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

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

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

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

答案 2 :(得分:6)

另一种可能性是不首先生成它们。

If[IntegerQ[#], #, N@#] & /@ Range[0, 180, 45/2]

  

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

答案 3 :(得分:5)

通常,您应该使用Rationalize

Rationalize@10.
Out[1] = 10

但是在您的情况下,您不应该只使用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]

enter image description here

上面的代码生成与您相​​同的列表,然后有条件地替换那些FractionalPart等于0.的元素(例如10.) ,及其IntegerPart(例如10)。

答案 4 :(得分:4)

另一个选项是使用"."

删除任何尾随的StringTrim
Grid@Partition[
  Text[Style[
      StringTrim[ToString[Range[0, 180, 22.5][[#]]], "."] <> "\[Degree]", 
    Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]