سؤال

أنا أتطلع إلى القيام بما يلي: دعنا نقول أن لديّ رقمًا مثل 125.625 => أود أن أكون قادرًا على إخبار برنامجي بأنه 1 * 100 + 2 * 10 + 5 * 1 + 0.625. كيف يمكنني فعل ذلك من فضلك؟

شكرًا

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

المحلول

إذا كان لديك رقمك كعدد صحيح ، فيمكنك أن تفعل شيئًا كهذا:

value := 125.625
fractional part := value % 1
value := floor(value)

exponent = 1
listofvaluepairs = array()
while(value > 0)
{
  tmp_part := value % 10
  listofvaluepairs.add(value, exponent)
  exponent = exponent * 10
  value = floor(value / 10)
}

سوف يملأ PSUEDOCODE أعلاه قائمة ListofValuepairs بأزواج من الرقم والرقم الذي يجب مضاعفته. لذلك ستحصل على هذا:

{{1,100}, {2,10}, {5,1}}

والجزء الكسري لديه تلك القطعة الأخيرة التي تريدها.

للرجوع إليها ، ستعطي وظيفة الكلمة () الرقم بدون الجزء الكسري ، لذلك يعطي الأرضية (1.6) 1. مشغل ٪ (Modulo) سوف يعطي الباقي أكثر أو أقل بعد الانقسام. لذلك 7 ٪ 2 = 1.

ما أفعله في المثال أعلاه (وهو كثيرًا ليس رمز Java) ، هو الحصول على رقم واحد في وقت واحد من القيمة.

لذلك أبدأ بـ 125:

125 % 10 = 5
Then:
floor(125 / 10) = floor(12.5) = 12

ثم أكرر للحصول على 2 و 1. في نفس الوقت أقوم بحفظ 1 و 10 و 100 باستخدام متغير الأسعار.

نصائح أخرى

double num = 125.625;
System.out.print(num - (int)num);
num = (int) num;

for (int i=10; num!=0; i*=10) {
    System.out.print(" + " + i/10 + " * " + (num % i)/i*10);
    num -= num % i;
}

سوف يطبع:

0.625 + 1 * 5.0 + 10 * 2.0 + 100 * 1.0

بالطبع يمكنك تغيير الكود لإضافة أشياء إلى بنية البيانات.

يمكنك الحصول على كل رقم باستخدام Modulo أو % المشغل في حلقة لقيم عدد صحيح (أي: int ones = myVal % 10) وللحصول على القيمة الكسرية float fraction = val - (int)val;

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