एक मापांक को कम करने का मानक तरीका ऐड के बाद घाटे को जोड़ना है अगर एक अतिप्रवाह हुआ था। उदाहरण के लिए आप बाइनरी हार्डवेयर का उपयोग करते हुए बीसीडी जोड़ते हैं।
हालाँकि आप इस तरह से फ़्लोट का उपयोग कर सकते हैं, फिर भी यह सवाल है कि आपको क्या करना चाहिए । मूल रूप से पूर्णांक मात्रा क्या है, इस पर काम करने के लिए फ्लोट नंबरों का उपयोग करने के साथ समस्याएं अच्छी तरह से ज्ञात हैं, और मैं उन्हें यहां रिहा नहीं करने जा रहा हूं।
आम तौर पर, फ्लोट फ्रैक्शंस पर जोड़ 1.0 के मापांक के साथ अनुमानित रूप से काम करता है, अंश का एक अतिप्रवाह पूर्णांक भाग को बढ़ाता है। यदि हम बिंदु को घंटों के रूप में व्याख्या करते हैं। विभाजक को अलग करता है, तो हम चाहते हैं कि अंश 0.6 से अधिक हो जाए। इसके लिए उपयुक्त समय पर 0.4 के घाटे को जोड़ा जाना चाहिए।
function add_float_hours_minutes(a, b)
{
var trial_sum = a+b;
// did an actual overflow occur, has the integer part incremented?
if ( Math.floor(trial_sum) > Math.floor(a)+Math.floor(b) ) {
trial_sum += 0.4;
}
// has the fractional part exceeded its allotted 60 minutes?
if ( trial_sum-Math.floor(trial_sum) >= 0.6) {
trial_sum += 0.4;
}
return trial_sum;
}
var arr = [0.15, 0.2, 3.45, 0.4, 2, 0.3, 5.2, 1, 1.4, 1.1, 2.4, 1, 3.4]
var sum = 0.0;
arr.forEach(function(item) {
console.log(sum);
// sum += parseFloat(item);
sum = add_float_hours_minutes(sum, parseFloat(item));
});
जो निम्न आउटपुट का उत्पादन करता है, वह एक गोपन के भीतर सही होता है जिसे ओपी ने पूछा है
0
0.15
0.35
4.2
5.000000000000001
7.000000000000001
7.300000000000001
12.5
13.5
15.3
16.400000000000002
19.2
20.2
मैंने पाठक के लिए एक अभ्यास के रूप में दो दशमलव स्थानों पर अंतिम स्वरूपण छोड़ दिया है। उनके सभी महिमा में 15 अनुगामी अंक इस बात का हिस्सा हैं कि फ्लोट्स का उपयोग करना ऐसा करने का सबसे अच्छा तरीका नहीं है।
इसके अलावा, विचार करें कि क्या होता है जब आप सेकंड, या दिन शामिल करना चाहते हैं। या तो फ्लोट सेकंड के दो या अधिक मानक तरीके, या पूर्णांकों का टपल, अचानक बहुत अधिक समझदार दिखते हैं।