2009-10-09 16 views
7

से संख्यात्मक आउटपुट में यह सुनिश्चित करने के लिए कुछ सरल तरीका है कि, तारों में परिवर्तित होने पर, अनुमानित संख्याएं (यानी Real सिर के साथ संख्या) का पिछला भाग नहीं होगा "। मुझे यह अच्छा लगेगा अगर वे केवल उन मामलों में दशमलव बिंदु रखते हैं जहां वास्तव में एक प्रदर्शित आंशिक भाग होता है।पीछे की ओर दबाकर "।" गणित

समाधान मैंने पाया मजबूत नहीं हैं, और एक अजीब तरह से Precision और Accuracy एक साथ NumberForm का उपयोग कर, या एक और भी अधिक अजीब तरह से RealDigits के प्रयोग पर निर्भर करते हैं।

अग्रिम धन्यवाद।

उत्तर

5

मैं अतीत में इस का उपयोग किया है जब आंकड़ों में संख्या प्रदर्शित:

Integerise[x_] := If[Round[x] == x, ToString[[email protected]] <> ".0", [email protected]] 

बस <> ".0" को दूर यदि आप पूर्णांक को शून्य दशमलव के साथ प्रदर्शित नहीं करना चाहते हैं।

अद्यतन: टिप्पणी में dreeves से उल्लेख किया है, ToString अभी भी 0.0001 के भीतर या एक पूर्णांक के तो एक नंबर काट-छांट और डॉट को प्रदर्शित करेगा।

NormalNumber /@ {5, 5.5, 123.001, 123.0001} 

यह Integerise में शामिल किया जा सकता है इसके बाद के संस्करण समस्या को ठीक करने के लिए: एक परीक्षण के साथ

NormalNumber[x_] := ToString[x, InputForm] 

:

बिन्दु को दूर करने के लिए एक बेहतर तरीका ToString के लिए Inputform प्रारूप का उपयोग करने के लिए है का उल्लेख किया।

+1

मैंने अभी यह कोशिश की और पाया कि यह इंटीग्रेज [123.0001] के लिए टूटता है (यह पीछे की ओर एक स्ट्रिंग को समाप्त करता है "।)। – dreeves

1

मैं शायद स्ट्रिंग को पोस्ट-प्रोसेस कर दूंगा। यह जांचने के लिए कि क्या अंतिम चरित्र "है" यह तेज़ (और आसान तरीका) है। अनावश्यक अंकगणित करने और सभी परिशुद्धता सेटिंग्स को ध्यान में रखते हुए।

संपादित करें: शायद तुम यह जानते हो, लेकिन आप कुछ इस तरह कर सकते हैं:

userToString[expr_, form___] := ToString[expr,form]; 

userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]]; 
3

मेरा सुझाव यह:

shownum[x_] := StringReplace[[email protected][x, ExponentFunction->(Null&)], 
          RegularExpression["\\.$"]->""] 

यह सिर्फ एक regex खोज & अनुगामी पर प्रतिस्थापित नहीं करता है "।"। अगर आप चाहते हैं "123." "123" के बजाय "123.0" के रूप में प्रदर्शित करने के लिए बस ".0" के साथ उस अंतिम खाली स्ट्रिंग को प्रतिस्थापित करें।

अद्यतन: मेरा मूल संस्करण संख्याओं के लिए गलत दिखाया गया है जो वैज्ञानिक नोटेशन में डिफ़ॉल्ट रूप से गणित प्रदर्शित करता है। मैंने नंबरफॉर्म के साथ तय किया।

यहां वास्तव में वास्तविक जीवन में उपयोग किया जाने वाला संस्करण है। यह वैकल्पिक राउंडिंग के लिए अनुमति देता है:

(* Show Number. Convert to string w/ no trailing dot. Round to the nearest r. *) 
Unprotect[Round]; Round[x_,0] := x; Protect[Round]; 
re = RegularExpression; 
shn[x_, r_:0] := StringReplace[ 
    [email protected][Round[[email protected],r], ExponentFunction->(Null&)], [email protected]"\\.$"->""] 
+0

यह मेरे उत्तर में RemoveTrailingDot की भूमिका निभाता है। इसके अलावा, हालांकि मैं निश्चित रूप से रेगेक्स का एक बड़ा प्रशंसक हूं, यह सीधे स्ट्रिंग मैनिपुलेशन करने के लिए तेज़ है - अंतिम चरित्र की जांच करें और इसे छोड़ दें यदि यह "।" है। रेगेक्स निश्चित रूप से अनुकूलित करने के लिए तेज़ है, और शायद गति कोई मुद्दा नहीं है - लेकिन इस तरह के फ़ंक्शन को बार-बार कहा जा सकता है। (आप फ़ंक्शन को संकलित भी कर सकते हैं - अगर वह रेगेक्स के साथ काम करता है तो मेरे सिर के ऊपर से नहीं पता) – Cascabel

1

कार्यों NumberForm, ScientificForm, EngineeringForm, आदि ... प्रारूपित करके अपूर्णांश, आधार है और एक नंबर के प्रतिपादक व्यवस्था करने के लिए विकल्प NumberFormat प्रदान करता है।

numberTrim[expr_] := NumberForm[expr, 
    NumberFormat -> (Row[{StringTrim[#1, "."], 
     If[#3 == "", "", "\[ThinSpace]\[Times]\[ThinSpace]" <> #2^#3]}] &)]; 

डिफ़ॉल्ट गणित आउटपुट पुन: उत्पन्न होता है, लेकिन पिछला बिंदु हटा दिया जाता है।

संबंधित मुद्दे