كيف يمكنني تقسيم سلسلة أرقام على 1000 دون التحويل إلى رقم؟

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

  •  26-12-2019
  •  | 
  •  

سؤال

أحاول إنشاء سلسلة معينة باستخدام نموذج تغيير الأرقام، بحيث تبدو كما هو موضح أدناه.

تم التعديل ليظهر بالأرقام بدلاً من X.

لذلك دعونا نستعد، سأحصل على رقم، مثل هذا.

234.123123123

أحتاج إلى تغيير كيفية ظهوره، لثلاثة أرقام قبل النقطة، يجب أن يصبح.

0.234123123123

ولنفترض أن الرقم 2.23123123123، فسيصبح 0.0023123123123

والآن سأحاول شرح الصيغة باستخدام لغتي الإنجليزية.

تحتاج الصيغة إلى تغيير موضع النقطة ".".يمكنك أن ترى أنه يتغير مكانه، ولكن يمكنك أيضًا أن ترى أنني أقوم بإضافة أصفار.

وهذا أمر مهم، يجب إضافة الأصفار إذا كانت النقطة في أقصى اليسار (بداية السلسلة).

إذن، ما المقدار الذي يجب أن تتحرك به النقطة؟

يجب أن تتحرك النقطة دائمًا 3 خطوات إلى اليسار.

وإذا اصطدمت بالحائط (بداية السلسلة)، فأنت بحاجة إلى إضافة 0s، ثم 0s قبل النقطة.

لذا ، إذا كان الرقم ، 2.222222 ، سيتعين علي أولاً نقل النقطة إلى اليسار ، دعنا نظهر خطوة بخطوة.

Step 1:
.2222222

Step 2:
.02222222

Step 3:
0.02222222

يجب أن يكون دائمًا 0 قبل النقطة، حتى لا يصل إلى البداية.

يبدو الأمر أكثر تعقيدًا مما هو عليه الآن، كل ما في الأمر أنني لا أعرف كيف أشرحه.

يحرر:

محاولتي:

      TextPos = InStr(1, TextBox4.Value, ".") - 2
If (TextPos = 4) Then
     sLeft = Left(TextBox4.Value, Len(TextBox4.Value) - Len(TextBox4.Value) + 2)
      sRight = Right(TextBox4.Value, Len(TextBox4.Value) - 2)
      sFinal = (sLeft & "." & Replace(sRight, ".", ""))
      TextBox4.Value = Replace(sFinal, "-", "")
      End If
If (TextPos = 3) Then
      TextBox4.Value = "0." + Replace(TextBox4.Value, ".", "")
      End If
If (TextPos = 2) Then
      TextBox4.Value = "0.0" + Replace(TextBox4.Value, ".", "")
End If
If (TextPos = 1) Then
      TextBox4.Value = "0.00" + Replace(TextBox4.Value, ".", "")
End If
TextBox4.Value = Replace(TextBox4.Value, "-", "")

إذا قمت بـ /1000، فقد يعمل ذلك، ولكن يبدو أنه سيغير الرقم، مما يجعله يفشل.

Original: 25.1521584671082

/1000 : 2.51521584671082E-02

كما ترون، فإنه لا يعمل كما هو متوقع.

يجب أن يصبح 0.0251521584671082E-02 (وبالطبع لا أريد أن يكون "E-" هناك.لذلك، إذا كان من الممكن القيام بذلك، ولكن فقط التحرك وليس في الواقع، القسمة (أعتقد أن برنامج Excel يقتصر على عدد الأرقام التي يمكنه الحساب بها) فسوف ينجح الأمر.

تجدر الإشارة إلى أن الأرقام المعروضة هي في الواقع أقل (أقصر) من الرقم الحقيقي لسبب ما، إذا كتبته في ملف نصي، يصبح كما يلي:

2.51521584671082E-02251521584671082E-02

كما ترون، ربما وصلت إلى حائط في العملية الحسابية، لذلك تغيرت إلى الأحرف (أعلم أن الرياضيات تستخدم هذه الأحرف، لكن ليس لدي أي فكرة عما تعنيه، وهي عديمة الفائدة بالنسبة لي على أي حال).

وأعتقد أنه بسببهم فشل، لست متأكدًا من ذلك.

يحرر:

حسنًا، من خلال تحديد 15 رقمًا عشريًا، سيعيد المكان الصحيح، ولكنني لا أرغب في القيام بهذه الجولة، هل يجب أن يقتصر Excel حقًا على 15 رقمًا عشريًا فقط، أم أنه "مزدوج، عائم، وما إلى ذلك" هو الذي يفعل هذا؟

تحرير 2:

يقدم مثال توني ما يلي:

Original: 177.582010543847177582010543847
Tony's: 0.1775820110177582011
Round(15decimals): 0.1775820105438470177582010543847

لست متأكدًا حقًا، ولكن أليس هذا غير صحيح، أو ربما فعلت شيئًا خاطئًا؟

إذا كان ذلك ممكنًا، أريد أن تظل جميع الكسور العشرية والأرقام في مكانها، لأن كل شيء صحيح بالفعل، كل ما في الأمر أنهم في المكان الخطأ.

/1000 يحل هذه المشكلة، ولكن ليس بأفضل طريقة، حيث سيعيد الحساب بدلاً من التحرك فقط.عادة لا أهتم، فالنتائج هي نفسها، ولكن هنا الأمر مهم كما ترون.

ومع ذلك، يمكنني التفكير في حل، حيث أبحث عن موضع النقطة، ثم أقطع الكسور العشرية الأخيرة، وأقسم النتيجة على 1000، ثم أضيف الكسور العشرية الأخيرة لاحقًا، على الرغم من أن هذا يعد بمثابة اختراق، ولست متأكدًا مما إذا كان وسوف تعمل في الواقع.

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

شكرا جزيلا للجميع!

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

المحلول

رمز تفشل في بعض الأحيان لأنه لا يتعامل مع كل موقف. قمت بحساب النصوص حتى:

giveacodicetagpre.

يمكنك التعامل مع النصوص 4، 3، 2 أو 1. ولكن إذا، على سبيل المثال، TextBox4.Value="2.22222" ثم TextPos= 0 وليس لديك رمز لهذا الموقف.

في الساعة 11:45 بتوقيت جرينتش، اقترحت في تعليق أن تقسيم 1000 سيعطيك النتيجة التي تبحث عنها. في الساعة 14:08 بتوقيت جرينتش، نشر Tunderblaster هذا كإجابة. إنه الآن 15:23 لكنك لم تستجب لأيانا منا.

بعد أن جربت الكود الخاص بك، أعرف الآن أن الإجابة لا تتطابق مع النتيجة التي يعطيها عند عملها لأنك تقوم بإزالة الإشارة. ما يلي يمنحك نفس النسخة العاملة من التعليمات البرمجية الخاصة بك:

giveacodicetagpre.

النقص الوحيد مع هذا البيان هو أنه لا يحافظ على كل الأرقام العشرية الزائدة. هل هذا مهم حقا؟

بينما كنت أستعد وإشراف هذه الإجابة، قمت بتحرير سؤالك للدولة أن تقسيم 1000 سيعطي في بعض الأحيان النتيجة في التنسيق العلمي. حلاي يتجنب هذه المشكلة.

نصائح أخرى

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

giveacodicetagpre.

إذا كنت تريد تجنب خطأ النقطة العائمة عند القسمة على 10، فيمكنك استخدام Decimal يكتب

Private Sub CommandButton1_Click()
    Dim d As Variant
    d = CDec(TextBox1.Text)
    TextBox1.Text = d / 1000
End Sub

هل هذا ما تحاول؟

giveacodicetagpre.

جرب هذا.إنه يعمل عن طريق حشو السلسلة بخراط مع الأجيال الرائدة، مما يحول DP، ثم إزالة أي unnecassary المتبقية الجوهرية الرائدة في الأجيال

giveacodicetagpre.

هذه "الإجابة" ردود على المشكلة التي تريد الدقة التي تريدها في النتيجة ممكنة.

عندما كنت في المدرسة، كان هذا يطلق على الدقة الزائفة.لقد نسيت معظم رياضياتي في هذا المجال، لكنني سأحاول أن أعطيك فهم المشكلة.

لدي قيمة، 2.46، وهو دقيق إلى 2 منازل عشرية.هذه هي القيمة الحقيقية في مكان ما في النطاق 2.455 إلى 2.465.

إذا قمت بإطعام هذه القيم في وظيفة جذر مربعة سأحصل عليها:

giveacodicetagpre.

من هذا، أرى الجذر التربيعي للقيمة الحقيقية هو في مكان ما بين 1.567 و 1.570؛أي أرقام عشرية إضافية زائفة.

إذا فهمت بشكل صحيح، فما ترغب في استخدام هذه الأرقام لإجراء تعديلات.هل أنت قادر على إجراء تعديلات على 15 رقما عشريا؟

إذا كنت تتذكر حساب التفاضل والتكامل، فيمكنك البحث عن "اقتراح الخطأ" للحصول على توضيح أفضل.

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