ग्रोवी में अस्थायी बिंदु अंकगणित करने का प्रयास कर रहा है। इन विभिन्न प्रकार के व्यवहारों के कारण दृश्यों के पीछे क्यों/कैसे/क्या ग्रोवी कर रहा है, इस बारे में कोई जानकारी नहीं है?ग्रोवी इस तरह से अस्थायी बिंदु अंकगणित क्यों करता है?
double point2 = 0.2
double point1 = 0.1
double point3 = 0.3
assert point2 + point1 == point3 // false, as expected
| | | | |
0.2 | 0.1 | 0.3
| false
0.30000000000000004
float point2 = 0.2
float point1 = 0.1
float point3 = 0.3
assert point2 + point1 == point3 // false, as expected
| | | | |
0.2 | 0.1 | 0.3
| false
0.30000000447034836
def point2 = 0.2
def point1 = 0.1
def point3 = 0.3
assert point2 + point1 == point3 // this returns true
assert 0.2 + 0.1 == 0.3 // this returns true
मैंने सोचा कि इसे बिगडेसिमल के साथ करना है लेकिन फिर मैंने कोशिश की।
BigDecimal point2 = 0.2
BigDecimal point1 = 0.1
BigDecimal point3 = 0.3
float point4 = 0.4
assert point1 + point3 == point4
| | | | |
0.1 | 0.3 | 0.4
0.4 false
इस व्यवहार का कारण क्या है?
संभावित डुप्लिकेट [क्या फ़्लोटिंग पॉइंट गणित टूटा हुआ है?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – tmyklebu
@tmyklebu नहीं यह इस प्रश्न का डुप्लिकेट नहीं है; जबकि पहली छमाही यह इंगित करेगी कि, जैसा कि आवेषणों को गलत किया गया है, यहां प्रश्न "अंतर्निहित) प्रकार के बारे में है" फ्लोटी "संख्याओं के लिए ग्रोवी के प्रकार। – cfrick
@cfrick: मैं देखता हूं। आप सही हे; यह एक स्पष्ट फ्लोटिंग-पॉइंट शाब्दिक प्रकार के प्रकार के बारे में है। कृपया मेरी खुजली ट्रिगर उंगली माफ कर दो; मैंने '0.1' और' 0.2' और '0.3' देखा और कहा" हे भगवान, फिर से नहीं। " – tmyklebu