سؤال

كيفية الحصول على طول الكسر؟ إذا كان ذلك ممكنا، دون استخدام سلسلة أو حلقة

should all return length of 3:
5.234
5.23400
5.234000

يتم قبول أي لغة برمجة

تعديل

ليس واجبات منزلية، أريد عرض الكسور في الحد الأدنى. مثال، لقد حددت رقمي (18،8) في قاعدة البيانات. إذا أدخل المستخدم فقط 5.234، فإن البيانات المحفوظة في قاعدة البيانات هي 5.23400000. أريد فقط عرضه مرة أخرى كما 5.234 فقط

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

المحلول

If Int(num) = num Then Return 0
num *= 10
If Int(num) = num Then Return 1
num *= 10
If Int(num) = num Then Return 2
num *= 10
If Int(num) = num Then Return 3
num *= 10
If Int(num) = num Then Return 4
num *= 10
If Int(num) = num Then Return 5
num *= 10
If Int(num) = num Then Return 6
num *= 10
If Int(num) = num Then Return 7
num *= 10
If Int(num) = num Then Return 8
Throw New Exception("Number exceeds expected precision")

لا عمليات سلسلة، لا حلقات.

تعديل:

راجع للشغل، للقيام بذلك مع حلقة:

result = 0
Do While (Int(num) !> num) 
    num *= 10
    result += 1
Loop
Return result

أكثر قليلا أنيقة

نصائح أخرى

نظرا لأنك تشعر بالقلق إزاء العرض وليس التمثيل الداخلي، فلماذا لا تجرى فقط 0S زائدة؟

#!/use/bin/perl

my @nums = ( '5.234', '5.23400', '5.234000' );
$_ =~ s/0+$// for @nums;  # remove trailing 0s
$_ =~ s/\.$// for @nums;  # remove trailing .

print "@nums\n";

ربما يمكنك تحسين كليهما في regex واحد.

بالنسبة إلى الجزء غير الكسر، الطول هو:

int((ln(v)/ln(10))+.999)

طالما v> 1 حيث ln () هو logaritm الطبيعي و int () دائما تقريب. ل V == 1، LN (V) إرجاع 0، لذلك يجب عليك التعامل مع هذا في حالة خاصة.

يجب أن يكون من الممكن تحقيق نفس الشيء لجزء الكسر (v - int(v)) لكن الرياضيات بلدي فشل لي.

مجرد تنفيذ خوارزمية الشعبة. وتوقف عند عدد العدد> 7 أو 8 أرقام (float32)

عند استخدام Java و JDBC، احصل على القيمة عبر results.getbigdecal (). وبعد للحصول على المقياس الصحيح، استخدم هذا الرمز (Java 5 وما فوق؛ هناك خطأ في Java 1.4 مما يجعله يفشل "0.0"):

int precision = v.stripTrailingZeros().scale();

ل Java 1.4، انظر هذه الصفحة.

في جاوة:

Double.valueOf("5.34000").toString();

أفترض أنه قد ترغب في تحويل السلسلة إلى مزدوج على أي حال.

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