2011-02-11 14 views
15

मैं 10 दशमलव स्थानों के लिए बाहर मेरी डेटाबेस में अक्षांश और देशांतर मान हैं:मैं रूबी पर रूबी में 10 से 10 दशमलव स्थानों को कैसे बल दूं?

+----+---------------+-----------------+ 
| id | lat   | lng    | 
+----+---------------+-----------------+ 
| 55 | 34.4208305000 | -119.6981901000 | 
| 56 | 30.2671530000 | -97.7430608000 | 

मैं एक मैच के लिए डाटाबेस क्वेरी करने के लिए की जरूरत है, लेकिन मेरे वर्तमान चर केवल 6 दशमलव स्थानों के साथ एक नाव है:

self.lat => 30.267153 

मैं अपने फ्लोट को अतिरिक्त दशमलव स्थानों के रूप में कैसे परिवर्तित कर सकता हूं ताकि मुझे एक मैच मिल सके?

myloc = Marker.where("lat = ?", self.lat) 

मैं दशमलव और BigDecimal डॉक्स देखा है। क्या वे सबसे अच्छे दृष्टिकोण हैं?

रूबी 1.8.7, रेल 3. किसी भी सलाह के लिए धन्यवाद।

उत्तर

25

आप sprintf — उपयोग कर सकते हैं या इसे सरल भाई String#% — 10 दशमलव के साथ एक स्ट्रिंग के रूप में अपने चल बिन्दु संख्या फ़ॉर्मेट करने के लिए है:

f = 30.267153 
s = "%0.10f" % f 
#=> "30.2671530000" 

यह गड़बड़ लगती है मेरे लिए, यद्यपि; आपके लैट और एलएनजी कॉलम किस प्रकार के फ़ील्ड हैं? आप आरडीबीएमएस क्या उपयोग कर रहे हैं? क्या आप वास्तव में फ्लोटिंग पॉइंट मानों की तुलना करना चाहते हैं? क्या आप वास्तव में उन्हें तारों के रूप में संग्रहित करना चाहते हैं?

+0

कूल - यह काम किया - धन्यवाद। यह mysql है। अक्षांश/एलएनजी फ़ील्ड को टाइप दशमलव (15,10) के रूप में परिभाषित किया जाता है। नया मार्कर स्टोर करने से पहले डुप्लिकेट स्थान की जांच करने के लिए यह एक विशेष मामला है, इसलिए मैं एक-दूसरे के शीर्ष पर मार्करों के साथ हवा नहीं करता - इस प्रकार सटीक तुलना। – heyrolled

+4

मुझे पूरा यकीन है कि फोरोग का मुद्दा यह था कि समानता के लिए फ़्लोटिंग पॉइंट मानों की तुलना करना आम तौर पर मूर्ख नहीं है। –

+0

यह इंगित करने के लिए धन्यवाद, मुझे अब मिल गया है। मैं उस पर विचार करूंगा और कुछ परीक्षण करूंगा। – heyrolled

7

आप इस कोशिश कर सकते हैं:

"%.10f" % self.lat 
संबंधित मुद्दे