2013-02-11 103 views
5

में खो जाता है नाव कास्ट करने के लिए int करने के लिए कोशिश कर रहा है लेकिन वहाँ कुछ कमीफ्लोट मूल्य इंट

float submittedAmount = 0.51f; 

int amount = (int)(submittedAmount * 100); 

here is watch. look at the variable values

जवाब 50 क्यों है? जब आप लिखना 0.51f नहीं है

+1

इससे मदद मिल सकती है: http://stackoverflow.com/questions/8911440/strange-behavior-when-casting-a-float-to-int-in-c-sharp –

+1

आपको फ्लोट पर गोल करने की आवश्यकता हो सकती है एक int को कास्टिंग करने से पहले। – Quetzalcoatl

उत्तर

5
क्योंकि चल बिन्दु aritmethics की

बुलाया लेख पढ़ें, बढ़ी मूल्य नहीं बिल्कुल 51 है। जब मैंने अभी कोशिश की, * 0.51 एफ * 100 * परिणाम 50.9 99 9990463257 दिया।

और जब तुम और पूर्णांक के लिए 50.9999990463257 पार्स, तो आप निश्चित रूप से मिलता है।

यदि आप इस तरह की गणना सटीक मानना ​​चाहते हैं, तो आपको float के बजाय decimal जैसे प्रकार का उपयोग करना होगा।

यदि आप समझना चाहते हैं, तो मैंने नीचे दिए गए लेख को क्यों पढ़ा है।

What Every Computer Scientist Should Know About Floating-Point Arithmetic

0

उपयोग वर्ग में रूपांतरित करें। अन्यथा जवाब अभी भी हो जाएगा 50.

var amount = Convert.ToInt32(submittedAmount * 100.0)); 
0

0.51f वास्तव में 0.509999999999 है। क्योंकि फ्लोटिंग पॉइंट अपरिचित हैं।

मैं इसे जोड़ना चाहता हूं, मौद्रिक गणना के लिए float का उपयोग न करें। इसके बजाय decimal का उपयोग करें।