كيفية التحكم في علامات الزائد والناقص في تنسيق العملات
استخدم خيار signDisplay لإظهار أو إخفاء علامات الموجب والسالب عند تنسيق مبالغ العملات في JavaScript
مقدمة
عندما تعرض مبلغ معاملة مثل $500 في تطبيق مصرفي، لا يمكن للمستخدمين معرفة ما إذا كان هذا يمثل إيداعاً أم سحباً. غياب علامة الزائد أو الناقص يخلق غموضاً. من خلال إظهار +$500 أو -$500، فإنك توضح اتجاه المعاملة بشكل واضح.
تحتاج التطبيقات المالية إلى تحكم دقيق في كيفية ظهور العلامات مع مبالغ العملات. تُظهر سجلات المعاملات الإيداعات والسحوبات بعلامات صريحة. تعرض بيانات الأرباح والخسائر المكاسب والخسائر بمؤشرات موجبة وسالبة واضحة. تحتاج تغييرات رصيد الحساب إلى علامات مرئية لإظهار ما إذا كانت الأموال قد دخلت أو خرجت من الحساب. يوفر Intl.NumberFormat في JavaScript خيار signDisplay للتحكم بدقة في موعد ظهور علامات الزائد والناقص مع العملة المنسقة.
كيفية تنسيق العملات افتراضياً
افتراضياً، يُظهر Intl.NumberFormat علامة الناقص لمبالغ العملات السالبة ولا يُظهر أي علامة للمبالغ الموجبة.
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD"
});
console.log(formatter.format(250.50));
// Output: "$250.50"
console.log(formatter.format(-75.25));
// Output: "-$75.25"
console.log(formatter.format(0));
// Output: "$0.00"
يعمل هذا السلوك الافتراضي بشكل جيد لعرض الأسعار وأرصدة الحسابات. ومع ذلك، عند إظهار مبالغ المعاملات أو التغييرات المالية، فإن غياب علامة الزائد على القيم الموجبة يجعل الاتجاه غير واضح.
استخدام signDisplay للتحكم في علامات العملات
يتحكم خيار signDisplay في موعد ظهور علامات الزائد والناقص في العملة المنسقة. قم بتمرير هذا الخيار عند إنشاء منسق أرقام للعملة.
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
signDisplay: "always"
});
console.log(formatter.format(250.50));
// Output: "+$250.50"
console.log(formatter.format(-75.25));
// Output: "-$75.25"
الآن تُعرض المبالغ الموجبة بعلامة الزائد، مما يجعل الإيداعات والمكاسب صريحة بدلاً من ضمنية.
فهم قيم signDisplay للعملات
يقبل الخيار signDisplay خمس قيم. تخدم كل قيمة أغراضًا محددة في عروض البيانات المالية.
قيمة auto لتنسيق العملة القياسي
قيمة "auto" هي السلوك الافتراضي. تعرض علامة الطرح للمبالغ السالبة ولكن بدون علامة للمبالغ الموجبة.
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
signDisplay: "auto"
});
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"
استخدم "auto" لعرض الأسعار وأرصدة الحسابات وقيم العملات المطلقة الأخرى حيث تحتاج المبالغ السالبة إلى تحديد بينما يُفترض أن المبالغ الموجبة معروفة.
قيمة always لإظهار جميع اتجاهات المعاملات
تعرض قيمة "always" العلامات لجميع المبالغ، بما في ذلك الموجبة والسالبة والصفر.
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
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"
استخدم "always" لسجلات المعاملات وبيانات الأرباح والخسائر وموجزات نشاط الحساب حيث يهم اتجاه حركة الأموال لكل إدخال. توضح علامة الجمع الصريحة أن المبالغ الموجبة تمثل إيداعات أو مكاسب أو أموال واردة.
قيمة exceptZero لإبراز التغييرات الفعلية
تعرض قيمة "exceptZero" العلامات للمبالغ الموجبة والسالبة ولكنها تحذف العلامة للصفر.
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
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"
استخدم "exceptZero" لعرض تغييرات الرصيد حيث يمثل الصفر عدم وجود تغيير. هذا يجعل الصفر مميزًا بصريًا عن المكاسب أو الخسائر الفعلية. تستخدم منصات التداول وتطبيقات الاستثمار هذا التنسيق لإظهار تغييرات الأسعار وتغييرات قيمة المحفظة.
قيمة negative للتأكيد على الديون
تعرض قيمة "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));
// Output: "+$100.00"
const code = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "code",
signDisplay: "always"
});
console.log(code.format(100));
// Output: "+USD 100.00"
const name = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "name",
signDisplay: "always"
});
console.log(name.format(100));
// Output: "+100.00 US dollars"
تظهر العلامة في الموضع المناسب بغض النظر عن كيفية عرض العملة. يضمن ذلك رؤية متسقة للعلامة عبر تنسيقات العملات المختلفة.
يختلف موضع العلامة حسب اللغة
تضع اللغات المختلفة العلامة في أماكن مختلفة بالنسبة لرمز العملة. تتعامل JavaScript مع هذه الاتفاقيات الخاصة باللغة تلقائياً.
const enUS = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
signDisplay: "always"
});
console.log(enUS.format(100));
// Output: "+$100.00"
console.log(enUS.format(-100));
// Output: "-$100.00"
const frFR = new Intl.NumberFormat("fr-FR", {
style: "currency",
currency: "EUR",
signDisplay: "always"
});
console.log(frFR.format(100));
// Output: "+100,00 €"
console.log(frFR.format(-100));
// Output: "-100,00 €"
في الإنجليزية الأمريكية، تظهر العلامة قبل رمز العملة. في الفرنسية، تظهر العلامة قبل الرقم مع رمز العملة بعده. يحترم المنسق هذه الاتفاقيات الخاصة باللغة مع الالتزام باختيارك لـ signDisplay.
تضع بعض اللغات علامات السالب بشكل مختلف عن علامات الموجب حتى عند استخدام signDisplay: "always".
const nlNL = new Intl.NumberFormat("nl-NL", {
style: "currency",
currency: "EUR",
signDisplay: "always"
});
console.log(nlNL.format(100));
// Output: "+€ 100,00"
console.log(nlNL.format(-100));
// Output: "-€ 100,00"
تضمن JavaScript أن المخرجات تتبع قواعد التنسيق الصحيحة لكل لغة مع الحفاظ على رؤية العلامة التي تحددها.
حالات الاستخدام الواقعية للتحكم في علامة العملة
تتطلب السياقات المالية المختلفة استراتيجيات مختلفة لعرض العلامات.
سجلات المعاملات
تعرض تطبيقات البنوك ومنصات الدفع قوائم المعاملات حيث يُظهر كل إدخال حركة الأموال الداخلة أو الخارجة. استخدم 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)}`);
});
// Output:
// 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`);
});
// Output:
// 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));
// Output: "+$1,234.50"
console.log(formatter.format(-89.1));
// Output: "-$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));
// Output: "+$1,230"
console.log(formatter.format(-0.0456));
// Output: "-$0.0456"
يطبق المنسق قواعد الأرقام المعنوية مع الحفاظ على سلوك عرض العلامة الذي تحدده.
ما يجب تذكره
يتحكم خيار signDisplay في Intl.NumberFormat في موعد ظهور علامات الجمع والطرح في مبالغ العملة المنسقة. استخدم "always" لإظهار علامات صريحة لجميع المبالغ، و"exceptZero" لإخفاء العلامة على الصفر، و"auto" للسلوك الافتراضي، و"negative" لإظهار علامات الطرح فقط، و"never" لإخفاء جميع العلامات.
اختر قيمة signDisplay المناسبة بناءً على السياق المالي الخاص بك. تحتاج سجلات المعاملات إلى علامات صريحة لجميع المبالغ. تستفيد مؤشرات تغيير الرصيد من جعل الصفر محايدًا بصريًا. تعمل أرصدة الحسابات بشكل جيد مع تمييز القيم السالبة فقط. غالبًا ما تحتاج مقارنات الأسعار إلى قيم مطلقة بدون علامات.
ادمج signDisplay مع الترميز المحاسبي وأوضاع عرض العملة وخيارات دقة الكسور العشرية لإنشاء تنسيق العملة الدقيق الذي يحتاجه تطبيقك المالي. تتعامل JavaScript مع وضع العلامات الخاصة بالإعدادات المحلية تلقائيًا مع احترام تفضيلات عرض العلامات الخاصة بك.