جافا الرياضيات النقطة العائمة - (التحويل للأقدام / متر)

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

  •  03-07-2019
  •  | 
  •  

سؤال

أعتقد أن السؤال الأساسي هو - أنا أقوم بهذه الوظيفة:

private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      return toFeet;
}

المشكلة هي الإخراج.على سبيل المثال، أحصل على 337.36080000000004 من إدخال 101.ما هي الممارسة المناسبة لاقتطاع النقاط العائمة؟

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

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

المحلول

يمكنك استخدام أ تنسيق الرقم مثال.

NumberFormat nf = NumberFormat.getInstance(Locale.UK);
nf.setMinimumFractionDigits(4);
nf.setMaximumFractionDigits(4);
System.out.println(nf.format(feet));

أو يمكنك استخدام تنسيق عشري.

DecimalFormat df = new DecimalFormat("0.0000");
System.out.println(df.format(feet));

يتم استخدام الأخير (DecimalFormat) عندما تريد صراحةً تحديد التنسيق والأول (NumberFormat)، عندما تريد الإعدادات المترجمة.

بالنسبة لأربعة أرقام كسرية متسقة، ليست هناك حاجة للسحب في BigDecimal، إذا كنت لا تعمل على مسافات طويلة حقًا.

نصائح أخرى

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

وهنا رمز النهائي:

  private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      String formattedNumber = new DecimalFormat("0.0000").format(toFeet); //return with 4 decimal places
      double d = Double.valueOf(formattedNumber.trim()).doubleValue();
      return d;
}

إذا كنت بحاجة إلى حسابات دقيقة، استخدم BigDecimal بدلا من تعويم.إذا كنت تريد فقط الاقتطاع عند الطباعة، فاستخدم تنسيق عشري.

DecimalFormat df = new DecimalFormat ("0.00");
System.out.println(df.format(convertMetersToFeet(101)));

استخدم java.math.BigDecimal عن الحساب العشري.

وإذا لم يكن للطباعة يجب أن لا يهتمون الخطأ. 337.36080000000004 هو مجرد تصحيح مثل 337.3608 منذ لديك فقط 5 أرقام كبيرة في عامل و 3 فقط في إدخال اختبار. (وآمل بالتأكيد أن الجواب أعطى طريقتك كانت 331 وليس 337)

ولكن، هذا الخط المنال من سؤال آخر يبدو أن تفعل خدعة كذلك.

double toFeet = ((int)(meters*3.2808*10000))/10000.0;

والمشكلة الوحيدة هي أن يفيض على نحو أسرع كثيرا.

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