أسرع طريقة كفاءة لتحديد القيمة العشرية هي عدد صحيح في جافا
سؤال
إعطاء متغير مزدوج اسمه sizeValue
و sizeValue
يحتوي على شيء آخر غير 0 ، ما هي الطريقة الأكثر فعالية لتحديد ذلك sizeValue
يحتوي على قيمة عدد صحيح؟
حاليا أنا أستخدم
SizeValue ٪ 1 == 0
أي طرق أسرع أخرى؟
المحلول
جرب Math.Ceil:
private static boolean isInt(double x) {
return x == Math.ceil(x);
}
تعديل
لقد قمت ببعض المعايير مع الطرق التالية:
private static boolean isInt1(double x) {
return x == (int) x;
}
private static boolean isInt2(double x) {
return x == Math.ceil(x);
}
private static boolean isInt3(double x) {
return x % 1 == 0;
}
isInt1
هل أسرع منهم (على Sunjre 1.6)
نصائح أخرى
لست متأكدًا مما إذا كان ذلك أسرع ، ولكن يمكنك إلقاء مضاعفة على int واختبار المساواة:
double d = 123.456;
boolean dIsAnInteger = (d == (int)d);
تحذير: هل تفكر 0.9999999999999999
عدد صحيح؟ على الاغلب لا. لكن شاهد هذا:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
هذا يطبع:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
وهو مشكلة لأنه في نهاية البرنامج val
يحتوي على شيء تعتقد أنه يجب أن يكون صحيحًا ولكنه ليس كذلك.
لذلك سأجعل طريقتي أبطأ قليلاً (ولكن أكثر صحة) من خلال دمج دلتا مثل جونيت يفعل:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
وبالطبع توفير نفس الطريقة مع افتراضي معقول:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
الآن isInt(val)
أخيرًا يعود صحيح.
لا تنتمي إلى StackOverflow