كيفية تقسيم رقم إلى أجزاء مختلفة في جافا؟
-
26-09-2019 - |
سؤال
أنا أتطلع إلى القيام بما يلي: دعنا نقول أن لديّ رقمًا مثل 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;