मैं पूर्णांक के रूप में दशमलव डॉट के बाद नंबर प्राप्त करना चाहता हूं। उदाहरण के लिए, 1.05 से केवल 05 या 2.50 से केवल 50 नहीं 0.50
decimal, float, string, ...?
मैं पूर्णांक के रूप में दशमलव डॉट के बाद नंबर प्राप्त करना चाहता हूं। उदाहरण के लिए, 1.05 से केवल 05 या 2.50 से केवल 50 नहीं 0.50
decimal, float, string, ...?
जवाबों:
अद्यतन उत्तर
यहां मैं उसी के लिए 3 दृष्टिकोण दे रहा हूं।
[1] गणित समाधान का उपयोग कर Math.Truncate
var float_number = 12.345;
var result = float_number - Math.Truncate(float_number);
// इनपुट: 1.05
// आउटपुट: "0.050000000000000044"
// इनपुट: 10.2
// आउटपुट: 0.19999999999999929
यदि यह वह परिणाम नहीं है जो आप उम्मीद कर रहे हैं, तो आपको परिणाम को उस रूप में बदलना होगा जो आप चाहते हैं (लेकिन आप फिर से कुछ स्ट्रिंग जोड़तोड़ कर सकते हैं।)
[2] गुणक का उपयोग करना [जो N की शक्ति से १० है (जैसे १०³ या १० using) जहां N दशमलव दशमलव की संख्या है]
// multiplier is " 10 to the power of 'N'" where 'N' is the number
// of decimal places
int multiplier = 1000;
double double_value = 12.345;
int double_result = (int)((double_value - (int)double_value) * multiplier);
// आउटपुट 345
यदि दशमलव स्थानों की संख्या निश्चित नहीं है, तो यह दृष्टिकोण समस्याएं पैदा कर सकता है।
[३] "रेगुलर एक्सप्रेशंस (REGEX)" का उपयोग करते हुए
स्ट्रिंग के साथ समाधान लिखते समय हमें बहुत सावधान रहना चाहिए। यह कुछ मामलों को छोड़कर बेहतर नहीं होगा ।
यदि आप दशमलव स्थानों के साथ कुछ स्ट्रिंग ऑपरेशन करने जा रहे हैं, तो यह बेहतर होगा
string input_decimal_number = "1.50";
var regex = new System.Text.RegularExpressions.Regex("(?<=[\\.])[0-9]+");
if (regex.IsMatch(input_decimal_number))
{
string decimal_places = regex.Match(input_decimal_number).Value;
}
// इनपुट: "1.05"
// आउटपुट: "05"
// इनपुट: "2.50"
// आउटपुट: "50"
// इनपुट: "0.0550"
// आउटपुट: "0550"
आप Regex के बारे में और जानकारी http://www.regexr.com/ पर प्राप्त कर सकते हैं
., जो हमेशा दशमलव विभाजक नहीं होता (यानी, यूरोप में दशमलव विभाजक होता है ,)। आपको CultureInfo.Invariantइसे अंतर्राष्ट्रीय बनाने के लिए जोड़ना होगा। हालांकि यह सिर्फ उपयोग करने के लिए आसान है x - Math.Truncate(x)और आप उस परिणाम पर जादू करते हैं।
सबसे अच्छा तरीका है:
var floatNumber = 12.5523;
var x = floatNumber - Math.Truncate(floatNumber);
परिणाम आप अपनी पसंद के अनुसार बदल सकते हैं
var decPlaces = (int)(((decimal)number % 1) * 100);
यह मान लेता है कि आपकी संख्या में केवल दो दशमलव स्थान हैं।
(318.40d % 1) * 100आउटपुट 39.9999999999977, आप राउंडिंग एरर पाने के लिए कास्टिंग का उपयोग कर सकते हैं:var decPlaces = (int)(((decimal)number % 1) * 100);
'Math.Truncate' दृष्टिकोण की तुलना में एक क्लीनर और तेजी से समाधान है:
double frac = value % 1;
गोलाई समस्या के बिना हल:
double number = 10.20;
var first2DecimalPlaces = (int)(((decimal)number % 1) * 100);
Console.Write("{0:00}", first2DecimalPlaces);
आउटपुट: 20
ध्यान दें कि यदि हम दशमलव में नहीं आए, तो यह आउटपुट करेगा
19।
इसके अलावा:
318.40: आउटपुट 40(बजाय39)47.612345: आउटपुट 61(बजाय612345)3.01आउटपुट: 01(बजाय 1)यदि आप वित्तीय संख्या के साथ काम कर रहे हैं, उदाहरण के लिए यदि इस मामले में आप प्राप्त करने की कोशिश कर रहे हैं एक लेनदेन राशि सेंट का हिस्सा , तो हमेशा
decimalडेटा प्रकार का उपयोग करें ।
अपडेट करें:
निम्नलिखित भी काम करेगा यदि इसे एक स्ट्रिंग के रूप में संसाधित किया जाए (@ SearchForKnowledge के उत्तर पर निर्माण)।
10.2d.ToString("0.00", CultureInfo.InvariantCulture).Split('.')[1]
तब आप Int32.Parseइसे इंट में बदलने के लिए उपयोग कर सकते हैं ।
var result = number.ToString().Split(System.Globalization.NumberDecimalSeparator)[2]
इसे एक स्ट्रिंग के रूप में लौटाता है (लेकिन आप हमेशा उस इंट को वापस कास्ट कर सकते हैं), और मानता है कि संख्या एक "" है। कहीं।
int last2digits = num - (int) ((double) (num / 100) * 100);
318.401567dअपने समाधान आउटपुट 0.401567जहां 40अपेक्षित है।
public static string FractionPart(this double instance)
{
var result = string.Empty;
var ic = CultureInfo.InvariantCulture;
var splits = instance.ToString(ic).Split(new[] { ic.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.RemoveEmptyEntries);
if (splits.Count() > 1)
{
result = splits[1];
}
return result;
}
यहाँ एक विस्तार विधि मैंने एक समान स्थिति के लिए लिखी है। मेरा आवेदन 2.3 या 3.11 के प्रारूप में नंबर प्राप्त करेगा जहां संख्या के पूर्णांक घटक वर्षों का प्रतिनिधित्व करते हैं और भिन्नात्मक घटक महीनों का प्रतिनिधित्व करते हैं।
// Sample Usage
int years, months;
double test1 = 2.11;
test1.Split(out years, out months);
// years = 2 and months = 11
public static class DoubleExtensions
{
public static void Split(this double number, out int years, out int months)
{
years = Convert.ToInt32(Math.Truncate(number));
double tempMonths = Math.Round(number - years, 2);
while ((tempMonths - Math.Floor(tempMonths)) > 0 && tempMonths != 0) tempMonths *= 10;
months = Convert.ToInt32(tempMonths);
}
}
आप .जिस दोहरे का उपयोग करने का प्रयास कर रहे हैं, उससे डॉट हटा सकते हैंRemove() डबल को स्ट्रिंग में परिवर्तित करने के बाद फ़ंक्शन ताकि आप उस पर आवश्यक संचालन कर सकें
_Doubleके मूल्य के दोहरे होने पर विचार करें 0.66781, निम्न कोड केवल डॉट के बाद की संख्या दिखाएगा .जो कि हैं66781
double _Double = 0.66781; //Declare a new double with a value of 0.66781
string _Decimals = _Double.ToString().Remove(0, _Double.ToString().IndexOf(".") + 1); //Remove everything starting with index 0 and ending at the index of ([the dot .] + 1)
एक और समाधान
आप वर्ग का उपयोग कर सकते हैं Pathजो क्रॉस-प्लेटफ़ॉर्म तरीके से स्ट्रिंग इंस्टेंस पर संचालन करता है
double _Double = 0.66781; //Declare a new double with a value of 0.66781
string Output = Path.GetExtension(D.ToString()).Replace(".",""); //Get (the dot and the content after the last dot available and replace the dot with nothing) as a new string object Output
//Do something
एक regex का उपयोग करें: Regex.Match("\.(?\d+)")कोई मुझे सही कर रहा है अगर मैं यहाँ गलत हूँ
Regex.Matchलेकिन मुझे दशमलव के मान को प्राप्त करने की कोशिश करते समय निम्न त्रुटि मिली हैArgumentException was unhandled: parsing "\.(?\d+)" - Unrecognized grouping construct.
यह बहुत ही सरल है
float moveWater = Mathf.PingPong(theTime * speed, 100) * .015f;
int m = (int)(moveWater);
float decimalPart= moveWater -m ;
Debug.Log(decimalPart);
उपयोग क्यों नहीं int y = value.Split('.')[1];?
Split()समारोह अलग-अलग सामग्री में मूल्य विभाजन और 1बाद 2 मूल्य outputting है.
Int32.Parse((12.05123d.ToString("0.00").Split('.')[1]))