एक चाल है कि पूरे पूर्णांक के अलावा अन्य दशमलव अंक पर गोलाई के लिए उपयोगी है स्वरूपित ASCII पाठ के माध्यम से मूल्य गुजरती हैं, और निर्दिष्ट करने के लिए %f
प्रारूप स्ट्रिंग का उपयोग करने के लिए है गोल गोल वांछित। उदाहरण के लिए
mils = tonumber(string.format("%.3f", exact))
0,001 की एक बहु के लिए exact
में मनमाने ढंग से मूल्य दौर होगा।
math.floor()
या math.ceil()
में से किसी एक का उपयोग करने से पहले और बाद में स्केलिंग के साथ एक समान परिणाम हो सकता है, लेकिन किनारे के मामलों के उपचार के आसपास आपकी अपेक्षाओं के अनुसार विवरण प्राप्त करना मुश्किल हो सकता है। यह नहीं कि string.format()
के साथ यह कोई समस्या नहीं है, लेकिन इसे "अपेक्षित" परिणाम बनाने में बहुत सारे काम चल गए हैं।
दस की शक्ति के अलावा किसी अन्य चीज के लिए गोल करने के लिए अभी भी स्केलिंग की आवश्यकता होगी, और अभी भी सभी मुश्किल किनारे के मामले हैं। एक दृष्टिकोण है कि व्यक्त करने के लिए आसान है और स्थिर व्यवहार है
function round(exact, quantum)
local quant,frac = math.modf(exact/quantum)
return quantum * (quant + (frac > 0.5 and 1 or 0))
end
लिखने और frac
(और संभवतः exact
के हस्ताक्षर) पर सटीक हालत tweak बढ़त मामलों आप चाहते थे प्राप्त करने के लिए है।
"सही" अर्थों पर निर्भर करता है। किसी को सावधानीपूर्वक निर्णय लेना है कि आधा कदम क्या करना है, और नकारात्मक मूल्यों के साथ क्या करना है। दोनों आधा और 'मंजिल' जोड़ते हैं और आपका आधा हिस्सा घटाता है और 'छत' सटीक आधे के मामले में लगातार पूर्वाग्रह पेश करता है। और दोनों आधा और छिड़काव जोड़ने से अलग हैं मानते हैं कि छंटनी आमतौर पर शून्य की ओर घूमती है। कुछ मूल्यों में भी मूल्य को कार्यान्वित करना अधिक "निष्पक्ष" है। गोलाकार subtlety से भरा हुआ है। – RBerteig