كيفية عرض سعر صحيح حتى عشرين (سنتات) بما في ذلك الأصفار الزائدة في جافا؟

StackOverflow https://stackoverflow.com/questions/1734282

سؤال

هناك سؤال جيد حول تقريب الكسور العشرية في جافا هنا. وبعد لكنني كنت أتساءل كيف يمكنني تضمين الأصفار الزائدة لعرض الأسعار في برنامجي مثل: 1.50 دولار، 1.00 دولار

الحل البسيط لل

String.format("%.2g%n", 0.912385);

يعمل بشكل جيد فقط، ولكنه يغفل الصفر الزائد إذا كان في مكان عشري آخر. تأتي المشكلة في برنامجي على الرغم من أنني استخدم تعبيرات مثل هذا فقط:

double price = 1.50;

عندما أقوم بعمل حسابات بأسعار مختلفة (أضف، مضاعفة، إلخ)، يتم عرض النتيجة بشكل أساسي مثل هذا:

$2.5000000000000003

لذلك، فإن استخدام String.Format يعمل بشكل جيد لهذا الغرض، لكنه يقوم باقتطاع المثال أعلاه

$2.5

هل هناك طريقة مناسبة لإظهار الصفر الزائد في المكان العشري الثاني؟ أو كلا الزيروسين إذا كان إخراج الحساب يجب أن يكون

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

المحلول

أود أن أوصي بذلك تفعل هذا:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

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

نصائح أخرى

في حين أن الأجوبة الأخرى صالحة تماما (خاصة Duffymo's One)، لديك مشكلة أكبر بكثير من تنسيق الشاشة. أنت فعلا تستخدم تماما خاطئ اكتب مبلغ المال الذي هو منفصلة القيمة. بدل من double, ، يجب أن تفكر حقا في استخدام java.lang.BigDecimal.

(تحرير: ... أو فئة نقابلة منفصلة جيدا كما أشارت Duffymo في تعليق، على سبيل المثال فئات من Jscience نقدي الوحدة أو أكثر الأخيرة جودا-المال - الذي لا يزال يتعين إصداره كنسخة رسمية.)

ربما يمكن القيام به مع string.format (...)، ولكن يمكنك استخدام DecimalFormat:

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50

هل جربت:

String s = String.format("$%.2f", 2.50);

التي سوف تفعل الخدعة.

public static String getFormattedData(String actualString) 
    {
        String subString = "0.0";

        if(actualString.contains("."))
        {   
            subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); 

            if(Double.parseDouble(subString) > 0.0)
                return actualString;
            else
                actualString = actualString.substring(0, actualString.indexOf("."));
        }
        return actualString;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top