سؤال

وهو نوع بيانات ملائمة لتمثيل عدد عشري مثل "10364055.81".

إذا حاولت استخدام مزدوج:

double d = 10364055.81;

ولكن عند محاولة طباعة عدد ، كما عرض "1.036405581E7"،وأنا لا أريد.

يجب استخدام BigDecimal?ولكن كما عرض 10364055.81000000052154064178466796875.هل هناك أي نوع البيانات الذي يعرض القيم كما هو ؟ أيضا العدد قد يكون أكبر من واحد تؤخذ على سبيل المثال.

راجع للشغل, سوف باستخدام BigDecimal تأثير أداء التطبيق ؟ ؟ وقد استعمل هذا في تقريبا كل DTOs.

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

المحلول

يجب عليك استخدام BigDecimal - ولكن استخدام منشئ سلسلة, مثل:

new BigDecimal("10364055.81");

إذا كنت تمر double إلى BigDecimal, جافا يجب إنشاء المزدوجة الأولى منذ الزوجي لا يمكن أن تمثل معظم الكسور العشرية بدقة ، لا خلق القيمة 10364055.81000000052154064178466796875 و ثم ويمررها إلى BigDecimal منشئ.في هذه الحالة BigDecimal لا يوجد لديه وسيلة لمعرفة أن كنت في الواقع يعني مستدير الإصدار.

عموما استخدام غير سلسلة المنشئات من BigDecimal ينبغي أن يعتبر محذرا من أن كنت لا تحصل على الاستفادة الكاملة من الطبقة.

تحرير بناء على إعادة قراءة بالضبط ما تريد القيام به ، مطالبة الأولي وربما قوية جدا.BigDecimal هو خيار جيد عندما كنت في حاجة إلى تمثل القيم العشرية بالضبط (المال التعامل مع كونه الخيار الواضح أنك لا تريد 5.99 * واحد مليون دولار 5990016.45 على سبيل المثال.

ولكن إذا كنت لا تشعر بالقلق حول عدد مخزنة داخليا جدا مختلفة قليلا القيمة العشرية الحرفي دخلت كنت فقط ترغب في طباعته مرة أخرى في نفس الشكل ، ثم كما قال آخرون ، مثيل NumberFormat (في هذه الحالة ، new DecimalFormat("########.##")) سوف تفعل خدعة إخراج مزدوجة بشكل جيد ، أو السلسلة.شكل يمكن أن تفعل الكثير من الشيء نفسه.

أما بالنسبة الأداء BigDecimals وبطبيعة الحال سوف يكون أبطأ من استخدام الأوليات.عادة, على الرغم, إلا إن الغالبية العظمى من البرنامج يتضمن الرياضية التلاعب ، وكنت من المرجح أن فعلا لاحظت أي فرق السرعة.وهذا لا يعني يجب عليك استخدام BigDecimals جميع أنحاء العالم ؛ ولكن بدلا من ذلك ، أنه إذا كان يمكنك الحصول على فائدة حقيقية من الميزات التي سيكون من الصعب أو المستحيل أن أدرك مع عادي doubles, ثم لا عرق ضئيلة أداء الفرق أنها نظريا أعرض.

نصائح أخرى

كيف يتم عرض رقم هو متميزة من كيف يتم تخزين الرقم.

نلقي نظرة على DecimalFormat للتحكم في كيفية عرض الأرقام الخاصة بك عندما مزدوج (أو تطفو.... الخ).

لاحظ أن اختيار BigDecimal أكثر من ضعف (أو العكس بالعكس) له إيجابيات/سلبيات ، وسوف تعتمد على الاحتياجات الخاصة بك.انظر هنا للحصول على مزيد من المعلومات.من ملخص:

باختصار, إذا كان الأداء الخام ، الفضاء هي أهم العوامل ، بدائية النقطة العائمة أنواع المناسبة.إن القيم العشرية تحتاج إلى تكون ممثلة بالضبط عالية الدقة حساب أو مراقبة دقيقة من التقريب هو المطلوب فقط BigDecimal المطلوبة قدرات.

مزدوجة من شأنها أن تكون كافية من أجل توفير هذا العدد.إذا كانت المشكلة هي أنك لا تحب شكل عند الطباعة أو وضعه في سلسلة ، قد تستخدم أسلوب numberformat: http://java.sun.com/javase/6/docs/api/java/text/NumberFormat.html

يمكنك استخدام مزدوج عرض إذا كان مع النظام.للخروج.printf().

double d = 100003.81;
System.out.printf("%.10f", d);

.10f - يعني مزدوجة مع الدقة من 10

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