मुद्दा आप मूल 17.2/0.1
विभाजन उदाहरण के साथ सामना कर रहे हैं (के रूप में उल्लेख दिया दशमलव मूल्यों की फ्लोटिंग प्वाइंट प्रतिनिधित्व में अशुद्धि के कारण है Joey's comment में दूसरे उत्तर पर)। निकटतम पूर्णांक तक PowerShell के रूप में परिणाम के लिए स्वचालित रूप दौर होगा
PS> $bla = 17.2/0.1
PS> $bla.GetType().FullName
System.Double
PS> $bla.ToString()
172
PS> $bla.ToString('r')
171.99999999999997
इस के आसपास पाने के लिए एक आसान तरीका int
के रूप में परिणाम घोषित करने के लिए है,: आप इस अंतिम मूल्य का round-trip representation का परीक्षण करके PowerShell में देख सकते हैं मूल्य:
PS> [int]$bli = 17.2/0.1
PS> $bli.GetType().FullName
System.Int32
PS> $bli.ToString()
172
नोट यह डिफ़ॉल्ट नेट MidpointRounding.ToEven की विधि (भी बैंकर का गोलाई के रूप में जाना जाता है) का उपयोग करता है।यह अच्छा सांख्यिकीय गुण जब संख्यात्मक मान की बड़ी संख्या सारणी, लेकिन यह भी करने के लिए बदला जा सकता है है सरल से दूर शून्य विधि:
function round($value, [MidpointRounding]$mode = 'AwayFromZero') {
[Math]::Round($value, $mode)
}
PS> [int]3.5
4
PS> [int]4.5
4
PS> round 3.5
4
PS> round 4.5
5
एक अन्य विकल्प मूल मूल्यों, के लिए एक अधिक सही प्रतिनिधित्व का उपयोग है जो मुद्दा पूरी तरह से दूर रहेंगे: बहुत जल्द ही
PS> $bld = [decimal]17.2/0.1
PS> $bld.GetType().FullName
System.Decimal
PS> $bld.ToString()
172
स्रोत
2011-11-13 16:02:57
बोले ... [गणित] :: मंजिल (17.2/0.1) आउटपुट 171, मैं उत्पादन 172. – ted
को यह जरूरत अजीब ... यही कारण है कि है? – Louis
@ लुइस: क्योंकि फ़्लोटिंग-पॉइंट नंबर '17.2' और' 0.1' का प्रतिनिधित्व नहीं कर सकते हैं, यही कारण है कि आपको अंतिम स्थानों में गोल करने वाली त्रुटियां मिल रही हैं और इस प्रकार परिणाम * * के करीब है, लेकिन 172 नहीं है। – Joey