ध्यान दें कि यदि आप गणित नहीं कर रहे हैं, सटीक जोर देते हुए चल बिन्दु मूल्यों के साथ कुछ भी गलत नहीं है। उदाहरण के लिए:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
इस मामले में, आप यकीन है कि यह वास्तव में MIN_VALUE
, नहीं शून्य या -MIN_VALUE
या MIN_NORMAL
या कुछ अन्य बहुत छोटे मूल्य है बनाना चाहते हैं। आप कह सकते हैं
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
लेकिन इससे आपको एक बहिष्करण चेतावनी मिल जाएगी। कि बचने के लिए आप assertEquals(Object, Object)
बजाय कॉल कर सकते हैं:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
और, यदि आप वास्तव में चालाक देखना चाहते हैं:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
या फिर आप Hamcrest धाराप्रवाह शैली कथनों का उपयोग कर सकते हैं:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
यदि आप जिस मान को देख रहे हैं कुछ गणित करने से आता है, हालांकि, ईपीएसलॉन का उपयोग करें।
स्रोत
2013-04-30 23:43:11
तो मुझे ईपीएसलॉन के रूप में क्या मूल्य पारित करना चाहिए? – Emerald214
@ Emerald214 परिशुद्धता की मात्रा। यदि आप यह कहना चाहते हैं कि एक डबल मान 0 डी ईपीएसलॉन 0 होगा (100% सटीकता, कोई अपवाद नहीं)। यदि आप त्रुटि का मार्जिन चाहते हैं (डिग्री के लिए कहें) तो आप ईपीएसलॉन को 1 पर सेट कर सकते हैं, उदाहरण के लिए, 64.2 डिग्री 64.8 डिग्री के बराबर है (चूंकि abs (64.8-64.2) <1) –