संभव डुप्लिकेट:
round() for float in C++सी ++: एक int के लिए डबल कैसे गोल करें?
मैं एक डबल है (फोन यह x), मतलब 55 होने के लिए लेकिन वास्तविकता में 54.999999999999943157 जो मैं सिर्फ महसूस किया के रूप में जमा।
तो जब मैं
double x = 54.999999999999943157;
int y = (int) x;
y = 54 55 के बजाय करते हैं!
यह मुझे लंबे समय तक परेशान करता है। मैं इसे सही तरीके से कैसे प्राप्त करूं?
आप संख्या में 0.5 जोड़ सकते हैं और फिर अपनी कास्ट को एक int में छंटनी करने के लिए कर सकते हैं। क्या आपको नकारात्मक संख्याओं को गोल करने की ज़रूरत है? – Blastfurnace
आप इस प्रीप्रोसेसर परिभाषा का उपयोग कर सकते हैं: '# परिभाषित ROUND_2_INT (एफ) ((int) (f> = 0.0? (F + 0.5): (f - 0.5))) – c00000fd
असल में 54.9 99 99 99 99 99 9943157 8 यूएलपी नीचे _exactly representable_ 55 है 'डबल' से आपका मतलब आईईईई 754 से बाइनरी 64 है। तो यह नहीं है कि वास्तव में 55 कैसे संग्रहीत किया जाता है, इसका परिणाम यह है कि इसकी गणना कितनी कमजोर थी। – Ruslan