كيفية التحكم في علامات الزائد والناقص في تنسيق العملة

استخدم خيار signDisplay لإظهار أو إخفاء العلامات الموجبة والسالبة عند تنسيق مبالغ العملة في جافا سكريبت

مقدمة

عندما تعرض مبلغ معاملة مثل 500$ في تطبيق مصرفي، لا يستطيع المستخدمون معرفة ما إذا كان هذا يمثل إيداعًا أو سحبًا. غياب علامة الزائد أو الناقص يخلق غموضًا. من خلال إظهار +500$ أو -500$، فإنك توصل اتجاه المعاملة بوضوح.

تحتاج التطبيقات المالية إلى تحكم دقيق في كيفية ظهور العلامات مع المبالغ النقدية. تُظهر سجلات المعاملات الإيداعات والسحوبات بعلامات صريحة. تعرض بيانات الربح والخسارة المكاسب والخسائر بمؤشرات إيجابية وسلبية واضحة. تحتاج تغييرات رصيد الحساب إلى علامات مرئية لإظهار ما إذا كانت الأموال دخلت أو غادرت الحساب. توفر Intl.NumberFormat في جافا سكريبت خيار signDisplay للتحكم بدقة في وقت ظهور علامات الزائد والناقص مع العملات المنسقة.

كيف يتم تنسيق العملة افتراضيًا

بشكل افتراضي، تُظهر Intl.NumberFormat علامة ناقص للمبالغ النقدية السالبة ولا تُظهر أي علامة للمبالغ الموجبة.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD"
});

console.log(formatter.format(250.50));
// الناتج: "$250.50"

console.log(formatter.format(-75.25));
// الناتج: "-$75.25"

console.log(formatter.format(0));
// الناتج: "$0.00"

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

استخدام signDisplay للتحكم في علامات العملة

يتحكم خيار signDisplay في وقت ظهور علامات الزائد والناقص في العملة المنسقة. قم بتمرير هذا الخيار عند إنشاء منسق أرقام للعملة.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always"
});

console.log(formatter.format(250.50));
// الناتج: "+$250.50"

console.log(formatter.format(-75.25));
// الناتج: "-$75.25"

الآن تظهر المبالغ الإيجابية بعلامة زائد، مما يجعل الإيداعات والمكاسب صريحة بدلاً من أن تكون ضمنية.

فهم قيم signDisplay للعملات

يقبل خيار signDisplay خمس قيم. كل قيمة تخدم أغراضًا محددة في عرض البيانات المالية.

قيمة auto للتنسيق القياسي للعملات

قيمة "auto" هي السلوك الافتراضي. تُظهر علامة الطرح للمبالغ السالبة ولكن بدون علامة للمبالغ الموجبة.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "auto"
});

console.log(formatter.format(1000));
// النتيجة: "$1,000.00"

console.log(formatter.format(-500));
// النتيجة: "-$500.00"

console.log(formatter.format(0));
// النتيجة: "$0.00"

استخدم "auto" لعرض الأسعار وأرصدة الحسابات وغيرها من قيم العملات المطلقة حيث تحتاج المبالغ السالبة إلى تحديد ولكن يُفترض أن المبالغ الموجبة.

قيمة always لإظهار جميع اتجاهات المعاملات

قيمة "always" تعرض العلامات لجميع المبالغ، بما في ذلك الموجبة والسالبة والصفر.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always"
});

console.log(formatter.format(1000));
// النتيجة: "+$1,000.00"

console.log(formatter.format(-500));
// النتيجة: "-$500.00"

console.log(formatter.format(0));
// النتيجة: "+$0.00"

استخدم "always" لسجلات المعاملات وبيانات الربح والخسارة وتغذيات نشاط الحساب حيث يهم اتجاه حركة المال لكل إدخال. توضح علامة الزائد الصريحة أن المبالغ الموجبة تمثل الودائع أو المكاسب أو الأموال الواردة.

قيمة exceptZero لإبراز التغييرات الفعلية

قيمة "exceptZero" تعرض العلامات للمبالغ الموجبة والسالبة ولكنها تحذف العلامة للصفر.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "exceptZero"
});

console.log(formatter.format(1000));
// النتيجة: "+$1,000.00"

console.log(formatter.format(-500));
// النتيجة: "-$500.00"

console.log(formatter.format(0));
// النتيجة: "$0.00"

استخدم "exceptZero" لعرض تغييرات الرصيد حيث يمثل الصفر عدم وجود تغيير. هذا يجعل الصفر مميزًا بصريًا عن المكاسب أو الخسائر الفعلية. تستخدم منصات التداول وتطبيقات الاستثمار هذا التنسيق لإظهار تغيرات الأسعار وتغيرات قيمة المحفظة.

القيمة السالبة للتأكيد على الديون

تعرض القيمة "negative" علامة الطرح للمبالغ السالبة فقط، باستثناء الصفر السالب. تظهر المبالغ الموجبة والصفر بدون علامات.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "negative"
});

console.log(formatter.format(1000));
// Output: "$1,000.00"

console.log(formatter.format(-500));
// Output: "-$500.00"

console.log(formatter.format(0));
// Output: "$0.00"

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

قيمة never لعرض المبالغ المطلقة

تعرض القيمة "never" مبالغ العملة بدون أي علامات، حتى للقيم السالبة.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "never"
});

console.log(formatter.format(1000));
// Output: "$1,000.00"

console.log(formatter.format(-500));
// Output: "$500.00"

console.log(formatter.format(0));
// Output: "$0.00"

استخدم "never" لعرض المبالغ المطلقة حيث يتم توصيل الاتجاه من خلال وسائل أخرى. عندما تستخدم قوائم المعاملات أعمدة منفصلة للخصوم والائتمانات، أو عندما يشير الترميز اللوني إلى القيم الموجبة والسالبة، فإن إزالة العلامة تمنع المعلومات المكررة.

دمج signDisplay مع نمط المحاسبة

يدعم تنسيق العملة تدوين محاسبي يعرض المبالغ السالبة بين قوسين. قم بتعيين currencySign إلى "accounting" لتمكين هذا التنسيق.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencySign: "accounting"
});

console.log(formatter.format(1000));
// Output: "$1,000.00"

console.log(formatter.format(-500));
// Output: "($500.00)"

يضع تنسيق المحاسبة المبالغ السالبة بين قوسين بدلاً من استخدام علامة الطرح. تظهر هذه الاتفاقية في التقارير المالية وبرامج المحاسبة والبيانات التجارية.

يمكنك دمج تدوين المحاسبة مع قيم signDisplay مختلفة للتحكم في كيفية ظهور المبالغ الموجبة بينما تستخدم المبالغ السالبة الأقواس.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencySign: "accounting",
  signDisplay: "always"
});

console.log(formatter.format(1000));
// Output: "+$1,000.00"

console.log(formatter.format(-500));
// Output: "($500.00)"

console.log(formatter.format(0));
// Output: "+$0.00"

مع signDisplay: "always"، تظهر المبالغ الموجبة بعلامة زائد بينما تستمر المبالغ السالبة في استخدام الأقواس. يعمل هذا التنسيق بشكل جيد لبيانات الربح والخسارة حيث تحتاج كل من المكاسب والخسائر إلى تحديد واضح.

مع signDisplay: "exceptZero"، يظهر الصفر بدون علامة بينما تستخدم المبالغ الموجبة والسالبة مؤشراتها الخاصة.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencySign: "accounting",
  signDisplay: "exceptZero"
});

console.log(formatter.format(1000));
// Output: "+$1,000.00"

console.log(formatter.format(-500));
// Output: "($500.00)"

console.log(formatter.format(0));
// Output: "$0.00"

يسلط هذا المزيج الضوء على التغييرات الفعلية مع جعل الصفر محايدًا بصريًا.

كيف يعمل signDisplay مع أوضاع عرض العملة

يدعم تنسيق العملة ثلاثة أوضاع عرض للعملة نفسها. يتحكم خيار currencyDisplay في ما إذا كان سيتم عرض العملة كرمز أو رمز أو اسم.

يعمل خيار signDisplay بشكل متسق عبر جميع أوضاع عرض العملة.

const symbol = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencyDisplay: "symbol",
  signDisplay: "always"
});

console.log(symbol.format(100));
// الناتج: "+$100.00"

const code = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencyDisplay: "code",
  signDisplay: "always"
});

console.log(code.format(100));
// الناتج: "+USD 100.00"

const name = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencyDisplay: "name",
  signDisplay: "always"
});

console.log(name.format(100));
// الناتج: "+100.00 US dollars"

تظهر العلامة في الموضع المناسب بغض النظر عن كيفية عرض العملة. هذا يضمن رؤية متسقة للعلامة عبر تنسيقات العملة المختلفة.

يختلف موضع العلامة حسب اللغة المحلية

تضع اللغات المحلية المختلفة العلامة في أماكن مختلفة بالنسبة لرمز العملة. تتعامل جافا سكريبت مع هذه الاتفاقيات الخاصة باللغة المحلية تلقائيًا.

const enUS = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always"
});

console.log(enUS.format(100));
// الناتج: "+$100.00"

console.log(enUS.format(-100));
// الناتج: "-$100.00"

const frFR = new Intl.NumberFormat("fr-FR", {
  style: "currency",
  currency: "EUR",
  signDisplay: "always"
});

console.log(frFR.format(100));
// الناتج: "+100,00 €"

console.log(frFR.format(-100));
// الناتج: "-100,00 €"

في اللغة الإنجليزية الأمريكية، تظهر العلامة قبل رمز العملة. في الفرنسية، تظهر العلامة قبل الرقم مع رمز العملة بعده. يحترم المنسق هذه الاتفاقيات المحلية مع الحفاظ على اختيارك لـ signDisplay.

تضع بعض اللغات المحلية علامات سالبة بشكل مختلف عن العلامات الموجبة حتى عند استخدام signDisplay: "always".

const nlNL = new Intl.NumberFormat("nl-NL", {
  style: "currency",
  currency: "EUR",
  signDisplay: "always"
});

console.log(nlNL.format(100));
// الناتج: "+€ 100,00"

console.log(nlNL.format(-100));
// الناتج: "-€ 100,00"

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

حالات استخدام واقعية للتحكم في علامة العملة

تتطلب السياقات المالية المختلفة استراتيجيات عرض مختلفة لعلامات العملة.

سجلات المعاملات

تعرض تطبيقات البنوك ومنصات الدفع قوائم المعاملات حيث تُظهر كل معاملة حركة الأموال الواردة أو الصادرة. استخدم signDisplay: "always" لجعل اتجاه كل معاملة واضحًا بشكل صريح.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always"
});

const transactions = [
  { description: "Salary deposit", amount: 3500 },
  { description: "Rent payment", amount: -1200 },
  { description: "Grocery store", amount: -85.50 },
  { description: "Refund", amount: 25 }
];

transactions.forEach(transaction => {
  console.log(`${transaction.description}: ${formatter.format(transaction.amount)}`);
});
// Output:
// Salary deposit: +$3,500.00
// Rent payment: -$1,200.00
// Grocery store: -$85.50
// Refund: +$25.00

توضح العلامات الصريحة ما إذا كانت كل معاملة قد زادت أو قللت من رصيد الحساب.

بيانات الربح والخسارة

تُظهر التقارير المالية المكاسب والخسائر بمؤشرات إيجابية وسلبية واضحة. استخدم signDisplay: "always" مع الترميز المحاسبي للبيانات المالية الاحترافية.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  currencySign: "accounting",
  signDisplay: "always"
});

const financials = {
  revenue: 150000,
  expenses: -95000,
  netIncome: 55000
};

console.log(`Revenue: ${formatter.format(financials.revenue)}`);
// Output: Revenue: +$150,000.00

console.log(`Expenses: ${formatter.format(financials.expenses)}`);
// Output: Expenses: ($95,000.00)

console.log(`Net Income: ${formatter.format(financials.netIncome)}`);
// Output: Net Income: +$55,000.00

يتبع هذا التنسيق الاتفاقيات المحاسبية مع توضيح المكاسب والخسائر بشكل واضح.

مؤشرات تغير الرصيد

تُظهر منصات الاستثمار وتطبيقات التداول كيف تغيرت قيم الحسابات بمرور الوقت. استخدم signDisplay: "exceptZero" لإبراز التغييرات الفعلية مع جعل عدم التغيير محايدًا بصريًا.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "exceptZero"
});

const changes = [
  { period: "Today", change: 125.50 },
  { period: "This week", change: -45.75 },
  { period: "This month", change: 0 },
  { period: "This year", change: 1850 }
];

changes.forEach(item => {
  console.log(`${item.period}: ${formatter.format(item.change)}`);
});
// Output:
// Today: +$125.50
// This week: -$45.75
// This month: $0.00
// This year: +$1,850.00

يظهر الصفر بدون علامة، مما يجعله بارزًا كفترة بدون تغيير.

أرصدة الحسابات

تعرض تطبيقات البنوك أرصدة الحسابات الحالية حيث تشير القيم السالبة إلى السحب على المكشوف. استخدم signDisplay: "negative" لتسليط الضوء على الديون مع التعامل مع الأرصدة الإيجابية كحالة طبيعية.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "negative"
});

const accounts = [
  { name: "Checking", balance: 2500 },
  { name: "Savings", balance: 15000 },
  { name: "Credit Card", balance: -850 }
];

accounts.forEach(account => {
  console.log(`${account.name}: ${formatter.format(account.balance)}`);
});
// الناتج:
// Checking: $2,500.00
// Savings: $15,000.00
// Credit Card: -$850.00

تلفت علامة الناقص الانتباه إلى الرصيد السالب بينما تظهر الأرصدة الإيجابية بدون علامات.

الفروق المطلقة في مقارنة الأسعار

تعرض تطبيقات التسوق وأدوات مقارنة الأسعار مقدار اختلاف الأسعار بين الخيارات. استخدم signDisplay: "never" عند عرض فروق الأسعار المطلقة حيث لا يهم الاتجاه.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "never"
});

const comparisons = [
  { item: "Laptop A vs B", difference: -150 },
  { item: "Phone X vs Y", difference: 75 },
  { item: "Tablet M vs N", difference: -25 }
];

comparisons.forEach(comp => {
  console.log(`${comp.item}: ${formatter.format(comp.difference)} difference`);
});
// الناتج:
// Laptop A vs B: $150.00 difference
// Phone X vs Y: $75.00 difference
// Tablet M vs N: $25.00 difference

تظهر جميع المبالغ كقيم إيجابية، مما يوضح حجم الفرق بغض النظر عن أي الخيارات أكثر تكلفة.

دمج signDisplay مع دقة الكسور العشرية

يعمل خيار signDisplay مع جميع خيارات تنسيق العملة الأخرى. يمكنك التحكم في المنازل العشرية والتقريب وعرض العلامة معًا.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always",
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});

console.log(formatter.format(1234.5));
// الناتج: "+$1,234.50"

console.log(formatter.format(-89.1));
// الناتج: "-$89.10"

هذا يضمن دقة عشرية متسقة مع إظهار علامات صريحة لجميع المبالغ.

يمكنك أيضًا دمج signDisplay مع الحد الأدنى والأقصى للأرقام المهمة للحسابات العلمية أو المالية.

const formatter = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  signDisplay: "always",
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 3
});

console.log(formatter.format(1234.567));
// الناتج: "+$1,230"

console.log(formatter.format(-0.0456));
// الناتج: "-$0.0456"

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

ما يجب تذكره

يتحكم خيار signDisplay في Intl.NumberFormat في وقت ظهور علامات الزائد والناقص في مبالغ العملة المنسقة. استخدم "always" لإظهار علامات صريحة لجميع المبالغ، و"exceptZero" لإخفاء العلامة على الصفر، و"auto" للسلوك الافتراضي، و"negative" لإظهار علامات الناقص فقط، و"never" لإخفاء جميع العلامات.

اختر قيمة signDisplay المناسبة بناءً على سياقك المالي. تحتاج سجلات المعاملات إلى علامات صريحة لجميع المبالغ. تستفيد مؤشرات تغيير الرصيد من جعل الصفر محايدًا بصريًا. تعمل أرصدة الحسابات بشكل جيد مع إبراز القيم السالبة فقط. غالبًا ما تحتاج مقارنات الأسعار إلى قيم مطلقة بدون علامات.

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