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}