जवाबों:
का उपयोग करें Math.round()
, संभवतः के साथ संयोजन के रूप मेंMidpointRounding.AwayFromZero
उदाहरण के लिए:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
double d = 1.234;
int i = Convert.ToInt32(d);
हैंडल राउंडिंग जैसे:
निकटतम 32-बिट हस्ताक्षरित पूर्णांक पर गोल किया गया। यदि मान दो पूर्ण संख्याओं के बीच आधा है, तो सम संख्या वापस आ जाती है; अर्थात्, 4.5 को 4 में परिवर्तित किया जाता है, और 5.5 को 6 में परिवर्तित किया जाता है।
Math.Round
यह आवश्यक के रूप में एक इंट रिटर्न देता है।
[0,.5)
- नीचे और ठीक आधी संख्या - [.5,1)
- ऊपर। यहां तक कि थोड़ा करने के लिए गोलाई भी संख्या पक्षपात, के रूप में यह दौर (.5,1.5)
1 के लिए, लेकिन [1.5,2.5]
2. करने के लिए
आप फ़ंक्शन का उपयोग भी कर सकते हैं:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
वास्तुकला के आधार पर यह कई गुना तेज है।
double d;
int rounded = (int)Math.Round(d);
मुझे पता है कि यह सवाल पुराना है, लेकिन मैं अपने इसी सवाल के जवाब की तलाश में इसे पार कर आया। मुझे लगा कि मुझे जो बहुत उपयोगी टिप दी गई है, मैं उसे साझा करूंगा।
इंट में कनवर्ट करते समय, .5
डाउनकास्टिंग से पहले बस अपने मूल्य में जोड़ें । डाउनकास्टिंग के रूप में int
हमेशा कम संख्या (जैसे (int)1.7 == 1
) पर गिरता है , यदि आपका नंबर .5
अधिक या अधिक है, तो जोड़ने .5
से यह अगले नंबर पर आ जाएगा और आपके डाउनकास्ट को int
सही मूल्य वापस करना चाहिए। (उदा (int)(1.8 + .5) == 2
)
+ 0.5 * Math.Abs(d)
अन्य उत्तरों में विधियाँ फेंकती हैं OverflowException
यदि फ्लोट मान Int श्रेणी के बाहर है। https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_
int result = 0;
try {
result = Convert.ToInt32(value);
}
catch (OverflowException) {
if (value > 0) result = int.MaxValue;
else result = int.Minvalue;
}
एकता के लिए, Mathf.RoundToInt का उपयोग करें ।
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
// Prints 10
Debug.Log(Mathf.RoundToInt(10.0f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.2f));
// Prints 11
Debug.Log(Mathf.RoundToInt(10.7f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.5f));
// Prints 12
Debug.Log(Mathf.RoundToInt(11.5f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.0f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.2f));
// Prints -11
Debug.Log(Mathf.RoundToInt(-10.7f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.5f));
// Prints -12
Debug.Log(Mathf.RoundToInt(-11.5f));
}
}
public static int RoundToInt(float f) { return (int)Math.Round(f); }
मैं एक वैज्ञानिक कैलकुलेटर विकसित कर रहा हूं जो एक Int बटन को स्पोर्ट करता है। मैंने पाया कि निम्नलिखित एक सरल, विश्वसनीय समाधान है:
double dblInteger;
if( dblNumber < 0 )
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math.Round कभी-कभी अप्रत्याशित या अवांछनीय परिणाम पैदा करता है, और पूर्णांक (कास्ट या Convert.ToInt के माध्यम से) के लिए स्पष्ट रूपांतरण अक्सर उच्च-सटीक संख्याओं के लिए गलत मान पैदा करता है। उपरोक्त विधि हमेशा काम करने लगती है।
Convert.ToInt32()
एक ही बात नहीं करेंगे , या यह बस दशमलव के बाद सब कुछ पट्टी करता है?