سؤال

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

يتم تخزين قاعدة البيانات في إنجلترا يستخدم تنسيق جنيه استرليني 1000.00 على العملة ، ولكن المعلومات التي يتم جمعها محليا في بولندا حيث 1000,00 هو الشكل.

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

راجع للشغل لقد بحثت في CCur ، ولكن ليس متأكدا مما إذا كان سوف تفعل ما تريد.

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

المحلول

البيانات ليست في الواقع تخزين السلسلة "£1000.00";يتم تخزينها في تنسيق رقمي.

الشريط الجانبي: عادة قواعد البيانات يتم إعداد لتخزين كميات الأموال باستخدام إما عشري نوع البيانات (تسمى أيضا المال في بعض DBs) ، أو النقطة العائمة رقم (وتسمى أيضا مزدوج).

الفرق هو أنه عندما يتم تخزينها كما عشري أرقام معينة مثل 0.01 ممثلة بالضبط بينما في مزدوج هذه الأرقام لا يمكن تخزينها تقريبا ، مما تسبب في أخطاء التقريب.

قاعدة البيانات يظهر سيتم تخزين رقم "£1000.00" لأن هناك تنسيق العرض.في VB6, هناك وظيفة FormatCurrency التي من شأنها أن تأخذ عدد مثل 1000 والعودة سلسلة مثل "£1000.00".

ستلاحظ أن FormatCurrency الدالة لا تأخذ حجة تحديد ما هو نوع العملة للاستخدام.هذا هو لأنه ، جنبا إلى جنب مع غيرها من الإعدادات المحلية-وظائف محددة في VB الأرقام من العملة الحالية من لغة النظام (من لوحة التحكم ويندوز).

وهذا يعني أن على النظام ،

Debug.Print FormatCurrency(1000)

طباعة $1,000.00, ولكن إذا قمت بتشغيل نفس البرنامج على جهاز كمبيوتر ويندوز تعيين إلى المملكة المتحدة اللغة ، فإنه من المحتمل الطباعة £1,000.00, والتي بالطبع هو شيء مختلف تماما.

وبالمثل, كنت قد حصلت على بعض التعليمات البرمجية في مكان ما, لا أستطيع أن أقول أين ، في بولندا ، على ما يبدو ، هو المسؤول عن تحليل المستخدم السلسلة وتحويلها إلى رقم.وإذا كان هذا الرمز هو في Visual Basic, مرة أخرى, انها تعتمد على لوحة التحكم إلى أن تقرر ما إذا كان "". أو " ، "هو فاصل الآلاف وعما إذا كان "" ، أو "." هو العلامة العشرية.

وظيفة CDbl يحول حجتها إلى عدد.لذلك على سبيل المثال على نظام بلدي في الولايات المتحدة

Debug.Print CDbl("1.200")

تنتج عدد نقطة واحدة اثنين على نظام مع لوحة التحكم لتعيين الأوروبي التنسيق ، سيكون إنتاج عدد ألف و مائتان.

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

نصائح أخرى

ماذا قاعدة البيانات الذي تستخدمه ؟ و ما نوع البيانات الكمية المخزنة ؟

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

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

@KiwiBastard نعم أعتقد ذلك.هل أنت تخزين كمية الخاص بك في "(n)varchar" حقل أو كنت تستخدم العملة/عشري نوع الحقل ؟ إذا كان هذا الأخير هو العملة الرموز والفواصل وأضاف العميل الخاص بك ، لن تكون هناك حاجة إلى استبدال أي شيء في قاعدة البيانات.

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