2011-08-18 15 views
11

में गोल करने के लिए गोल करने की संख्या, उदाहरण के लिए, (/ 1.0 7.0), मुझे केवल 17 अंक मिलते हैं: 0.14285714285714285। मैं तब और कैसे प्राप्त कर सकता हूं?क्लोजर

उत्तर

14

उपयोग BigDecimal संख्या और with-precision:

(with-precision 50 (/ 1M 7)) 
=> 0.14285714285714285714285714285714285714285714285714M 
+0

हाँ, यह काफी सरल था। ऐसे प्रश्न पूछने के लिए मेरे लंगड़े। बहुत धन्यवाद! –

+0

निरीक्षण करें, यहां तक ​​कि परिशुद्धता और बिगडिसीमल कुछ बिंदु पर घूम रहा है और अंकों 142857 को अनंत काल में दोहराया जाता है। (http://en.wikipedia.org/wiki/Continued_fraction देखें) – klang

+0

क्लोजर दस्तावेज़: ['परिशुद्धता'] (http://clojuredocs.org/clojure_core/clojure.core/with-precision) –

10

Clojure (और काफी सभी lisps) अनुपात प्रकार है कि जिस तरह से आप सटीक नहीं खोना है। सटीक समस्याओं से बचने के लिए अपनी सभी गणना अनुपात के साथ करें और अंतिम मिनट में डबल/फ्लोट में कनवर्ट करें।

+0

हालांकि, अनुपात के साथ सावधान रहें। उदाहरण के लिए, यदि आप बार-बार अनुपात को गुणा करते रहते हैं, तो आप विशाल संख्यात्मक और denominators के साथ समाप्त हो सकता है। यह बहुत धीमा हो सकता है और बहुत सी रैम का उपयोग कर सकता है। – Mars