سؤال

لدي مشكلة صغيرة مع وظيفة في جافا برامج.أريد أن تحقق مجموع أرقام ، " ضعف " متغير.(على سبيل المثال:5 يجب العودة 1 ، 5.0034 أن عودة 5 ، 2.04 أن عودة 3.) وظيفة هذا:

private int getDoubleLength (double a) {
        int len = 0;
        while (a != (int) a) {
            a *= 10;
        }
        while (a > 1) {
            len ++;
            a/=10;
        }
        System.out.println(String.format("Double %f has %d digits.",a,len));
        return len;
    }

الآن هذا يعمل تماما, ولكن عندما أنا جعل بعض العمليات الحسابية ، يمكنك الحصول على أخطاء طفيفة في الزوجي:أقسم 10 من كوس(60) ، والتي هي 0,5.يجب أن تكون الإجابة 20.0, ولكن البرنامج يعطي 20.000000000000004 (أن عدد نسخ ذلك).في حين بلدي حلقة يحصل عالقا ، توقف البرنامج.

أي أفكار ؟ (أو غيرها من حلول رائعة للتحقق من أرقام من رقم.)

هل كانت مفيدة؟

المحلول

الزوجي والعوامات والعمليات في ذلك الوقت ليست دقيقة لذلك سيكون هناك دائما أخطاء طفيفة نحلة مقارنة بالحسابات الجبرية.إذا كنت تستخدم Cosites ETC، فستضطر دائما إلى التعامل مع أخطاء التقريب هذه التي يجب أن تصف أي كتاب أو نص ويب على التحليل العددي.إذا كنت تستخدم عمليات أسلحة بسيطة، فابحث عن java.lang.BigdeMal

للحصول على تفاصيل حول كيفية تخزين قيم النقطة العائمة. إسهم ما يجب أن يعرفه كل عالم كمبيوتر حول الحساب العائم

نصائح أخرى

tostring (). طول () يجب أن يحلها <يكون> تذكر طرح "."إذا كان هناك ولا ينبغي حساب

هذا هو كيف لي أن تنفذ لي, بسيطة تحويل السلسلة عند مزدوجة كانت كبيرة عاد سلسلة مع الأسي التمثيل.أنا.هـ 20000000 سيعود 2.0 E+7 الانقسام ثم تقسيمه من هنا مما أدى إلى الخطأ في العد.كنت BigDecimal و toPlainString() طريقة

protected int countDecimalDigits(Double d) {
    BigDecimal deci = BigDecimal.valueOf(d);
    int integerPlaces = 0;
    int decimalPlaces = 0;
    String text = deci.toPlainString();

    String[] integerDecimalSplit = text.split("\\.");
    if (null != integerDecimalSplit[0]) {
        integerPlaces = integerDecimalSplit[0].length();
    }
    if (integerDecimalSplit.length > 1) {
        decimalPlaces = integerDecimalSplit[1].length();
    }
    return integerPlaces + decimalPlaces;
}

إنها مشكلة في التقريب.أود استخدام السلاسل، عد الشخصيات، وتحديد الأرقام التي يجب حسابها مهمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top