كيفية كتابة نموذج أولي لNumber.toFixed في جافا سكريبت؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

وأحتاج لجولة الأرقام العشرية إلى ستة أماكن باستخدام جافا سكريبت، ولكن أنا بحاجة إلى النظر المتصفحات القديمة لذا فإنني يمكن 'ر تعتمد على Number.toFixed

<اقتباس فقرة>   

والصيد كبير مع toExponential، toFixed، وtoPrecision هي أنها بنيات حديثة إلى حد ما غير معتمدة في موزيلا فايرفوكس حتى الإصدار 1.5 (على الرغم من IE دعم الطرق منذ الإصدار 5.5). في حين انها في الغالب آمنة للاستخدام هذه الأساليب، سوف المتصفحات القديمة كسر لذلك إذا كنت كتابة برنامج العام من المستحسن أن توفر النماذج الخاصة بك لتوفير وظائف لهذه الأساليب لمتصفح السن.

وأنا تفكر في استخدام شيء من هذا القبيل

Math.round(N*1000000)/1000000

ما هي أفضل طريقة لتقديم هذا النموذج إلى المتصفحات القديمة؟

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

المحلول

وجرب هذا:

if (!Number.prototype.toFixed)

    Number.prototype.toFixed = function(precision) {
        var power = Math.pow(10, precision || 0);
        return String(Math.round(this * power)/power);
    }

نصائح أخرى

وأعتقد فايرفوكس 1.5 و IE 5 الى حد كبير لم تعد تستخدم، أو كمية صغيرة جدا من الناس.
ومن قليلا مثل الترميز لدعم متصفح نيتسكيب ... :-)
إلا بعض المتصفح الرئيسي الآخر (أوبرا؟ سفاري؟ المستبعد ...) لا يعتمد هذا، أو إذا أظهرت سجلات الويب الخاص بك الكثير من استخدام المتصفح القديم، وربما يمكنك فقط استخدام هذه الأساليب.
في وقت ما، لدينا للمضي قدما. ^ _ ^

[تحرير] يعمل بشكل جيد على أوبرا وسفاري 3.1 9.50

javascript: var num = 3.1415926535897932384; alert(num.toFixed(7));

وهذه المادة لك مرجع هو سنة ونصف تقريبا، والخلود في صناعة تكنولوجيا المعلومات ... وأعتقد أنه، على عكس مستخدمي IE، مستخدمي فايرفوكس غالبا ما تذهب إلى أحدث إصدار.

بايت الموقع ، هذه هي وظيفة وتقريبا نفس الشيء من سيرج llinsky ل:

if (!num.toFixed) 
{
  Number.prototype.toFixed = function(precision) 
  {
     var num = (Math.round(this*Math.pow(10,precision))).toString();
     return num.substring(0,num.length-precision) + "." + 
            num.substring(num.length-precision, num.length);
  }
}

وثمة خيار آخر هو (والتي لا تتحول إلى سلسلة لا داعي له، وأيضا بتصحيح خطأ في التقدير من (162.295) .toFixed (2) إلى 162.29 (يجب أن يكون 162.30)).

Number.prototype._toFixed=Number.prototype.toFixed; //Preserves the current function
Number.prototype.toFixed=function(precision){
/* step 1 */ var a=this, pre=Math.pow(10,precision||0);
/* step 2 */ a*=pre; //currently number is 162295.499999
/* step 3 */ a = a._toFixed(2); //sets 2 more digits of precision creating 16230.00
/* step 4 */ a = Math.round(a);
/* step 5 */ a/=pre;
/* step 6 */ return a._toFixed(precision);
}
/*This last step corrects the number of digits from 162.3 ( which is what we get in
step 5 to the corrected 162.30. Without it we would get 162.3 */

وتحرير: عند محاولة هذا التجسد محدد، this*=Math.pow(10, precision||0) يخلق خطأ غير صالح احالة الأيسر. فأعطى هذه الكلمة الرئيسية في a متغير. من شأنه أن يساعد أيضا إذا أغمضت مهامي ^ _ ^ ؛؛

وجرب هذا:

 Number.prototype.toFixed = function(precision) {
     var power = Math.pow(10, precision || 0);
     return String(Math.round(this * power)/power);
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top