考虑一下:
Grid@Partition[
Text[Style[ToString[Range[0, 180, 22.5][[#]]] <> "\[Degree]", Bold, 16,
GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
如何摆脱整数之后的点?
答案 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
所有值,如下所示:
要了解它的工作原理,只需在代码中插入(f/@)
即可重新格式化Range
输出的值:
Grid@Partition[
Text[Style[
ToString[(f/@ Range[0, 180, 22.5])[[#]]] <> "\[Degree]",
Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
所以
答案 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]
上面的代码生成与您相同的列表,然后有条件地替换那些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]