لماذا يتضمن التنسيق الرقمي القياسي للنسب المئوية مسافة؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

القصة الخلفية

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

myDecimal.ToString("P0")

ال 0 بعد P يقول لها أنني لا أريد المنازل العشرية.يعمل هذا إلى أقصى حد، حيث ينتهي الأمر بالناتج الخاص بي ليبدو شيئًا مثل:

تم حسابه على النحو الوارد أعلاه بناءً على الحد الأدنى لمعدل مساهمة الشركة على مراحل وهو 2%

مشكلة الفضاء

أريد حقًا التخلص من تلك المسافة بين الرقم وعلامة النسبة المئوية لأنه في بعض الحالات ينتهي الأمر بالتقسيم عبر الخطوط.وأيضًا، أفضّل النسبة المئوية مقارنة بالرقم.

الحلول الممكنة

1.أتش تي أم أل / المغلق الحل

يمكنني أن أضع <nobr> العلامة أو أ <span style="white-space: nowrap;"> حولها.لكن هذا يبدو محرجًا، وعلى أي حال أفضل أن تصل النسبة المئوية إلى الرقم لأنني أعتقد أنه يبدو أفضل.هذه هي الطريقة التي نكتبها بها في التقارير في هذه المنطقة من الغابة، لذا فهذه هي الطريقة التي أريدها على صفحة الويب.

2.سلسلة التنسيق المخصصة

سأنتهي في النهاية باستخدام سلسلة تنسيق رقمية مخصصة، على سبيل المثال.

myDecimal.ToString("0%")

السؤال

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

هل هناك طريقة لإخبار سلسلة التنسيق الرقمي القياسية لا أريد المساحة؟

هل هناك أي ضرر لاستخدام أ سلسلة تنسيق رقمية مخصصة أكثر من سلسلة التنسيق الرقمي القياسية?

حسنًا - أعترف أن هذا كان أكثر من سؤال - رصيد إضافي إذا أجبت عليه جميعًا.

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

المحلول

انظر الى http://www.nasdaq.com/ أو http://finance.yahoo.com/ يبدو أن علامة النسبة المئوية مباشرة بعد الرقم بدون مسافة بينهما شائعة :)

القي نظرة على http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.percentpositivepattern.aspx

ربما يعتمد ذلك على الثقافة، فالقيمة الافتراضية (الثابتة) هي n %

نصائح أخرى

لقد نجح هذا بالنسبة لي:

System.Globalization.CultureInfo  newCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.NumberFormat.PercentPositivePattern = 1;  // Avoid putting a space between a number and its percentage
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;

لتغيير قيمة PercentPositivePattern الافتراضية، يجب عليك إنشاء كائن CultureInfo جديد واستخدامه بدلاً من القيمة الافتراضية، والتي من المحتمل أن تكون "en-us".(بدلاً من ذلك، يمكنك تحديد "en-za" كالثقافة في Web.config الخاص بك، لكنني لا أوصي بذلك لأسباب واضحة.)

هناك وظيفة كبيرة على منتديات آسيا والمحيط الهادئ شرح كيفية القيام بكل هذا.انظر الكود المكتوب بواسطة الملصق الثالث (m0brien).لقد قمت بنسخ الكود الخاص به بالضبط إلى طريقة Page_Load الخاصة بصفحتي الرئيسية، بحيث لا أحتاج إلى التفكير في الأمر بعد الآن.

بالطبع، يمكنك دائمًا إجراء String.Format().Replace(" ", String.Empty)، ولكن يتعين عليك القيام بذلك في جميع أنحاء موقعك.بالإضافة إلى ذلك، بصراحة، أين المتعة في ذلك عندما يمكنك أن تشمر عن سواعدك وتلعب بقيم العولمة الخاصة بك؟؟؟

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