2009-03-13 18 views
15

पर जावा बिगडेसिमल को गोल करना मेरे पास एक बिगडिमल गणना परिणाम है जो मुझे निकटतम निर्दिष्ट अंतराल (इस मामले में यह वित्तीय बाजार टिक आकार है) में घूमने की आवश्यकता है।निकटतम अंतराल

उदा। मूल्य [टिक आकार] -> घुमावदार मूल्य

100.1 [0.25] -> 100 
100.2 [0.25] -> 100.25 
100.1 [0.125] -> 100.125 
100.2 [0.125] -> 100.25 

धन्यवाद।

अद्यतन: schnaader के समाधान, जावा/BigDecimal मामले में अनुवाद:

price = price.divide(tick).setScale(0, RoundingMode.HALF_UP).multiply(tick) 
+1

खोज योग्यता लिए, इस तकनीक का आधार बिंदु के कुछ मनमाने ढंग से अंश के लिए एक प्रतिशत मूल्य दौर के लिए इस्तेमाल किया जा सकता है। –

उत्तर

13

आप टिक आकार सामान्य सकते हैं और फिर हमेशा की तरह राउंडिंग तरीकों का उपयोग:

100.1 [0.25] -> * (1/0.25) -> 400.4 [1] -> round -> 400 ->/(1/0.25) -> 100 
100.2 [0.25] -> * (1/0.25) -> 400.8 [1] -> round -> 401 ->/(1/0.25) -> 100.25 

तो यह होना चाहिए:

Price = Round(Price/Tick) * Tick; 

यह भी ध्यान दें कि आपको BigDecima के लिए सही गोल मोड सेट करना होगा ls। उदाहरण के लिए BigDecimal Docs देखें। तो आपको यह सुनिश्चित करना चाहिए कि यह सही सेट करें और अपने कोड की शुद्धता की जांच के लिए कुछ परीक्षण लिखें।

+0

अच्छा धन्यवाद लगता है! जावा/बिगडिसीमल शब्दों में, यह बदसूरत में अनुवाद करता है: price.divide (टिक) .setScale (0, RoundingMode.HALF_UP)। Multiply (टिक) – Jon

1
p= p - p % t + ((p % t < t/2) ? 0.0 : t); 

// जहां पी = मूल्य और टी = टिक वेतन वृद्धि