考慮:合理化數值輸出
[email protected][
Text[Style[ToString[Range[0, 180, 22.5][[#]]] <> "\[Degree]", Bold, 16,
GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
如何才能擺脫以下的整數點的?
考慮:合理化數值輸出
[email protected][
Text[Style[ToString[Range[0, 180, 22.5][[#]]] <> "\[Degree]", Bold, 16,
GrayLevel[(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
你不能只是Rationalize
所有的值,如下明確:
要查看它是如何工作的,只需在您的代碼中插入(f/@)
以重新格式化輸出值Range
:
[email protected][
Text[Style[
ToString[(f/@ Range[0, 180, 22.5])[[#]]] <> "\[Degree]",
Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
所以
在一般情況下,你應該使用Rationalize
。
[email protected]
Out[1] = 10
不過你的情況,你不應該簡單地使用Rationalize
,因爲你不想上的一些內容進行操作。這是一個簡單的方法,可以做你想做的事。
list = Range[0, 180, 22.5] /. (x_ /; [email protected] == 0.) ->
[email protected]
[email protected][
Text[Style[ToString[list[[#]]] <> "\[Degree]", Bold, 16,
GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
上面的代碼產生相同的列表作爲你的,然後有條件代替那些具有元件FractionalPart
等於0.
(例如,10.
),以其IntegerPart
(例如10
) 。
另一種可能性不是首先生成它們。
If[IntegerQ[#], #, [email protected]#] & /@ Range[0, 180, 45/2]
給予
{0,22.5,45,67.5°,90°,112.5,135,157。5,180}
另一種選擇是,以消除任何使用StringTrim
尾隨"."
:
[email protected][
Text[Style[
StringTrim[ToString[Range[0, 180, 22.5][[#]]], "."] <> "\[Degree]",
Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
雖然原來的問題沒有與任何指數的數字,這將是最安全的,一般使用NumberForm如下:
trimPoint[n_] :=
NumberForm[n,
NumberFormat -> ([email protected]
RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]},
If[#3 != "", {
"\[Times]", SuperscriptBox[#2, #3]}, {}]]
] &)]
然後你只需要插入// trimPoint如下修改原始代碼:
[email protected][
Text[Style[
ToString[Range[0, 180, 22.5][[#]] // trimPoint] <> "\[Degree]",
Bold, 16, GrayLevel[(8 - #)/10]]] & /@ Range[8], 2, 1]
謝謝,結合蘇打水我認爲N @合理化@任何數字都應該這樣做? – 500
@ 500 N @ Rationalize @並沒有完全解決它,因爲'N'通過將整數(由'Rationalize'返回)轉換爲實數來解除結果!例如。 'N [合理化[45]]'返回「45.」作爲結果。 –
DavidC
比你大衛! – 500