सी # में फ्लोट करने के लिए स्ट्रिंग परिवर्तित


108

मैं "41.00027357629127" जैसे एक स्ट्रिंग को परिवर्तित कर रहा हूं, और मैं उपयोग कर रहा हूं;

Convert.ToSingle("41.00027357629127");

या

float.Parse("41.00027357629127");

ये तरीके 4.10002732E + 15 वापस करते हैं

जब मैं फ्लोट में परिवर्तित होता हूं तो मुझे "41.00027357629127" चाहिए। यह तार समान होना चाहिए ...


1
आप कैसे जानते हैं कि यह किस रूप में परिवर्तित होता है - यह है कि आप संख्या को कैसे प्रदर्शित कर रहे हैं
mmmmmm

1
किसी भी विचार क्यों अपने ToSingle? और नहीं ToFloat?
लॉर्ड डार्थ वडर

41.00027357629127 वैज्ञानिक संकेतन में 4.10002732E + 15 नहीं होगा, जब तक कि आपकी संस्कृति दशमलव बिंदु के बजाय दशमलव अल्पविराम (और हजारों विभाजक के रूप में डॉट) का उपयोग नहीं करती है, इसलिए संख्या वास्तव में पढ़ेगी: 4100027353529127 फलस्वरूप 4.10002732E + 15
ljgww के

जवाबों:


229

आपके धागे का स्थान एक के लिए सेट है जिसमें दशमलव चिह्न "," के बजाय "" है।

इसका उपयोग करके देखें:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

ध्यान दें, हालांकि, एक फ्लोट सटीक के कई अंकों को पकड़ नहीं सकता है। ऐसा करने के लिए आपको दोहरे या दशमलव का उपयोग करना होगा।


35
using System.Globalization;एक्सेस करने के लिए नेमस्पेस को जोड़ना न भूलेंCultureInfo
Mobiletainment

24

सबसे पहले, यह डिबगर में आपके द्वारा देखी गई संख्या की एक प्रस्तुति है floatवास्तविक मूल्य लगभग (ज्यादा के रूप में यह संभव है) सटीक है।

नोट: फ़्लोटिंग पॉइंट नंबर बनाम स्ट्रिंग्स के साथ काम करते समय हमेशा CultureInfo जानकारी का उपयोग करें ।

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

यह सिर्फ एक उदाहरण है; अपने मामले के लिए एक उपयुक्त संस्कृति चुनें।


मैं अपने कल्चरइन्फो को कैसे चुन सकता हूं? मैं टर्की में हूं जहां ı टीआर-टीआर जोड़ देगा?
मेहमत

1
@ मेहमेटnew System.Globalization.CultureInfo("tr-TR")
sshow

20

आप निम्नलिखित का उपयोग कर सकते हैं:

float asd = (float) Convert.ToDouble("41.00027357629127");

4
कृपया कुछ संदर्भ प्रदान करें कि यह सही उत्तर क्यों है।
बस पीटर्स


4

फ्लोट की शुद्धता 7 अंक है। यदि आप पूरे लॉट को रखना चाहते हैं, तो आपको डबल प्रकार का उपयोग करने की आवश्यकता है जो 15-16 अंक रखता है। फ़ॉर्मेटिंग के बारे में, पोस्ट को फ़ॉर्मेटिंग डबल्स के बारे में देखें । और आपको C # में दशमलव विभाजकों के बारे में चिंता करने की आवश्यकता है ।


यह थक गया है। मोटे तौर पर यह 4100027357629127.0 लौटाता है, यह बहुत बुरा है
मेहमत

2
ऐसा लगता है '।' चरित्र आपके लोकेल में दशमलव विभाजक नहीं है? बाहर की जाँच करें stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe

0

आप ऐसा कर सकते हैं double.Parse("41.00027357629127");


मुझे नहीं लगता कि वह पूछ रहा है कि इसे कैसे गोल किया जाए।
या मैपर

-2

अधिक सटीक मान प्राप्त करने के लिए आप फ्लोट के बजाय डबल के साथ पार्सिंग का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.