jquery - كيف يمكن تحويل سلسلة عملة إلى عدد عشري باستخدام جافاسكريبت؟
لدي صندوق نصي يحتوي على سلسلة عملة يجب عليّ بعد ذلك تحويل هذه السلسلة إلى عدد عشري لأقوم ببعض العمليات عليها.
"$1,100.00" → 1100.00
يجب أن يحدث هذا كله على جانب العميل. ليس لدي خيار سوى ترك سلسلة العملة كسلسلة عملة كإدخال ولكن أحتاج إلى تحويلها/صياغتها إلى قيمة مزدوجة للسماح ببعض العمليات الرياضية.
الإجابة رقم 1
إزالة جميع النقاط/الأرقام غير النقطية:
var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
الإجابة رقم 2
accounting.js هو الخيار المناسب. استخدمته في مشروع وكانت تجربتي معه جيدة جدًا.
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000
يمكنك العثور عليه في GitHub
الإجابة رقم 3
استخدم تعبيراً نمطياً لإزالة التنسيق (الدولار والفاصلة)، واستخدم parseFloat لتحويل السلسلة إلى رقم عشري.
var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
الإجابة رقم 4
أعلم أن هذا سؤال قديم ولكن أردت تقديم خيار إضافي.
يوفر jQuery Globalize القدرة على تحليل صيغة محددة ثقافياً إلى عدد عشري.
https://github.com/jquery/globalize
بالنظر إلى سلسلة "$13,042.00"، ومع تعيين Globalize إلى en-US:
Globalize.culture("en-US");
يمكنك تحليل قيمة العدد العشري هكذا:
var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
هذا سيعطيك:
13042.00
ويسمح لك بالعمل مع ثقافات أخرى.
الإجابة رقم 5
أعرف أن هذا سؤال قديم، لكن يبدو أن إجابة CMS تحتوي على خلل صغير للغاية: فهي تعمل فقط إذا كان تنسيق العملة يستخدم "." كفاصل عشري. على سبيل المثال، إذا كنت بحاجة للعمل بالروبل الروسي، ستبدو السلسلة كما يلي: "1 000,00 rub."
حلّي أقل أناقة بكثير من حل CMS، لكنه يجب أن ينجز المهمة.
var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\d+|\d.*?\d)(?:\D+(\d{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
console.log(number.toFixed(2));الافتراضات:
- قيمة العملة تستخدم الترميز العشري
- لا توجد أرقام في السلسلة ليست جزءًا من قيمة العملة
- قيمة العملة تحتوي على 0 أو رقمين في الجزء العشري منها *
يمكن للتعبير النمطي التعامل حتى مع شيء مثل "1,999 دولارًا و99 سنتًا"، على الرغم من أنه ليس ميزة مقصودة ولا ينبغي الاعتماد عليها.
آمل أن يساعد هذا شخصًا ما.
الإجابة رقم 6
هذا المثال يعمل بشكل جيد
var currency = "$1,123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
console.log(number);الإجابة رقم 7
لأي شخص يبحث عن حل في 2021 يمكنك استخدام Currency.js.
بعد الكثير من البحث، كانت هذه أكثر طريقة وجدتها موثوقة للإنتاج، لم أواجه أي مشكلات حتى الآن. بالإضافة إلى ذلك، إنها نشطة جدًا على GitHub.
currency(123); // 123.00
currency(1.23); // 1.23
currency("1.23") // 1.23
currency("$12.30") // 12.30
var value = currency("123.45");
currency(value); // 123.45
تايب سكريبت
import currency from "currency.js";
currency("$12.30").value; // 12.30
