2011-09-17 32 views

回答

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

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

所以

temps

+0

謝謝,結合蘇打水我認爲N @合理化@任何數字都應該這樣做? – 500

+4

@ 500 N @ Rationalize @並沒有完全解決它,因爲'N'通過將整數(由'Rationalize'返回)轉換爲實數來解除結果!例如。 'N [合理化[45]]'返回「45.」作爲結果。 – DavidC

+0

比你大衛! – 500

5

在一般情況下,你應該使用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] 

enter image description here

上面的代碼產生相同的列表作爲你的,然後有條件代替那些具有元件FractionalPart等於0.(例如,10.),以其IntegerPart(例如10) 。

+0

@ 500查看我上面的編輯 – abcd

+1

這種方法可能存在問題,例如, 'AccountingForm [ 1500000 * 0.675 /。 (x_ /; FractionalPart @ x == 0.) - > IntegerPart @ x]' –

+0

@ChrisDegnen你說得對。我沒有想到它會失敗的情況,只測試了OP的情況。感謝您指出:) – abcd

6

另一種可能性不是首先生成它們。

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

給予

{0,22.5,45,67.5°,90°,112.5,135,157。5,180}

4

另一種選擇是,以消除任何使用StringTrim尾隨"."

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

雖然原來的問題沒有與任何指數的數字,這將是最安全的,一般使用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]