Wolfram mathematica 合理化数字输出

Wolfram mathematica 合理化数字输出,wolfram-mathematica,Wolfram Mathematica,考虑: Grid@Partition[ Text[Style[ToString[Range[0, 180, 22.5][[#]]] <> "\[Degree]", Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1] Grid@Partition[ Text[Style[ToString[Range[0,180,22.5][[#]]]“\[Degree]”,粗体,16, 灰度[(8-#)/

考虑:

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


如何去掉整数后面的点?

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

f[x_] := If[IntegerQ[n = Rationalize[x]], n, x]
测试

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

(* Out  *)
67.5
0
45
您不能将所有值合理化,如下所示:

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

Grid@Partition[
Text[Style[
  ToString[(f/@ Range[0, 180, 22.5])[[#]]] <> "\[Degree]", 
  Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Grid@Partition[
文本[样式][
ToString[(f/@Range[0,180,22.5])[[度]]“\[度]”,
粗体,16,灰度[(8-#)/10]]]&/@Range[8],2,1]
所以


一般来说,您应该使用

然而,在您的情况下,您不应该简单地使用
合理化
,因为您不想对某些元素进行操作。这里有一个简单的方法,可以满足您的需求

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]
list=范围[0,180,22.5]/。(x_/);FractionalPart@x == 0.) -> 
IntegerPart@x
Grid@Partition[
Text[Style[ToString[list[#]]“\[Degree]”,粗体,16,
灰度[(8-#)/10]]]&/@Range[8,2,1]


上面的代码生成与您的列表相同的列表,然后有条件地将具有等于
0.
(例如
10.
)的元素替换为其(例如
10
)。

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

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

{0,22.5,45,67.5,90112.5135157.5180}


另一个选项是使用
StringTrim
删除任何尾随的

Grid@Partition[
  Text[Style[
      StringTrim[ToString[Range[0, 180, 22.5][[#]]], "."] <> "\[Degree]", 
    Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Grid@Partition[
文本[样式][
StringTrim[ToString[Range[0,180,22.5][[#]],“]”“\[度]”,
粗体,16,灰度[(8-#)/10]]]&/@Range[8],2,1]

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

trimPoint[n_] := 
NumberForm[n, 
 NumberFormat -> (DisplayForm@
  RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, 
    If[#3 != "", {
      "\[Times]", SuperscriptBox[#2, #3]}, {}]]
   ] &)]
Grid@Partition[
 Text[Style[
  ToString[Range[0, 180, 22.5][[#]] // trimPoint] <> "\[Degree]", 
  Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
然后只需通过插入//trimPoint修改原始代码,如下所示:

trimPoint[n_] := 
NumberForm[n, 
 NumberFormat -> (DisplayForm@
  RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, 
    If[#3 != "", {
      "\[Times]", SuperscriptBox[#2, #3]}, {}]]
   ] &)]
Grid@Partition[
 Text[Style[
  ToString[Range[0, 180, 22.5][[#]] // trimPoint] <> "\[Degree]", 
  Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
Grid@Partition[
文本[样式][
ToString[Range[0,180,22.5][[#]]//trimPoint]“\[Degree]”,
粗体,16,灰度[(8-#)/10]]]&/@Range[8],2,1]

谢谢你,我想加苏打水N@Rationalize@有多少人应该这样做?@500N@Rationalize@无法完全解决此问题,因为
N
通过将整数(由
Rationalize
返回)转换回实数来撤消结果!例如,
N[Rationalize[45.]
返回“45.”作为结果。re:edit,good catch;-)我在几分钟前投票时没有注意到这一点。这种方法可能有问题,例如
AccountingForm[1500000*0.675/(x_/);FractionalPart@x == 0.) -> IntegerPart@x]
@ChrisDegnen你说得对。我没有仔细考虑失败的案例,只是测试了OP的案例。谢谢你指出:)不客气。二进制表示意味着需要注意使用整数部分和分馏部分,例如
x=6250*0.292;{x,整数部分[x],整数部分[Round[x,10.^-6]}
产生{1825,1824,1825}