سؤال

أود التحويل double داخل String. أريد أن يكون لها قدر ممكن من الأرقام قدر الإمكان وأقصى 6.

لذلك وجدت String.format("%.6f", d) الذي يحول بلدي 100.0 داخل 100.000000. يعمل Max Precision بشكل صحيح ، لكنني أود تحويله إليه 100 (الحد الأدنى الدقة). هل لديك أي فكرة عن الطريقة التي تعمل بها هكذا؟

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

المحلول

يستخدم DecimalFormat: new DecimalFormat("#.0#####").format(d).

هذا سوف ينتج أرقام مع 1 إلى 6 أرقام عشرية.

حيث DecimalFormat ستستخدم رموز اللغة الافتراضية ، قد ترغب في توفير الرموز التي يجب استخدامها:

//Format using english symbols, e.g. 100.0 instead of 100,0
new DecimalFormat("#.0#####", DecimalFormatSymbols.getInstance( Locale.ENGLISH )).format(d)

من أجل التنسيق من 100.0 إلى 100 ، استخدم سلسلة التنسيق #.######.

لاحظ أن DecimalFormat سوف يدور افتراضيًا ، على سبيل المثال إذا قمت بالمرور 0.9999999 ستحصل على الإخراج 1. إذا كنت تريد الحصول على 0.999999 بدلاً من ذلك ، قدم وضعًا مختلفًا:

DecimalFormat formatter = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance( Locale.ENGLISH ));
formatter.setRoundingMode( RoundingMode.DOWN );
String s = formatter.format(d);

نصائح أخرى

هذا اختراق رخيص يعمل (ولا يقدم أي مشكلات تقريب):

String string = String.format("%.6f", d).replaceAll("(\\.\\d+?)0*$", "$1");

String.format("%.0", d) لن يعطيك أي أماكن عشرية

-أو-

String.format("%d", (int)Math.round(f))

لا يمكنك فقط صنع ملف setPrecision وظيفة ، نوع من مثل هذا

private static String setPrecision(double amt, int precision){
   return String.format("%." + precision + "f", amt);
}

ثم بالطبع لدعوته

setPrecision(variable, 2); //

من الواضح أنه يمكنك وضعه في التقريب أو أي شيء عليك القيام به.

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