Templat ini digunakan dalam 227,851 laman. Untuk mengelakkan gangguan yang besar dan beban pelayan yang tidak diperlukan, perubahan kepada templat ini seharusnya hendaklah diuji di sublaman /kotak pasir atau /ujian templat ini, ataupun dalam atau di dalam sublaman pengguna. Perubahan yang sudah dicuba bolehlah ditambahkan dengan satu suntingan ke dalam templat ini. Sila bincangkan perubahan-perubahan tersebut terlebih dahulu pada laman perbincangan sebelum melaksanakannya. |
Templat ini menggunakan Lua: |
Templat:Precision menentukan ketepatan (sebagai kiraan digit perpuluhan) untuk jumlah apa pun, besar atau negatif, menggunakan algoritma pantas. Ia juga dapat mengatasi titik perpuluhan (seperti "15." atau "-41.") atau sifar belakang (seperti "15.34000" mempunyai ketepatan sebagai 5 digit perpuluhan). Untuk input pecahan, ia mengembalikan logaritma asas sepuluh pengangka.
Contoh
{{Precision|1111.123456789}} |
9 |
{{Precision|1111.12345678}} |
8 |
{{Precision|1111.1234567}} |
7 |
{{Precision|1111.123456}} |
6 |
{{Precision|1111.12345}} |
5 |
{{Precision|1111111111.12345678}} |
8 |
{{Precision|1111111111.1234567}} |
7 |
{{Precision|1111111111.123456}} |
6 |
{{Precision|1111111111.12345}} |
5 |
{{Precision|1111111111.1234}} |
4 |
{{Precision|1111111111.123}} |
3 |
{{Precision|1111111111.12}} |
2 |
{{Precision|1111111111.1}} |
1 |
{{Precision|1111111111.10}} |
2 |
{{Precision|1111111111.100}} |
3 |
{{Precision|1111111111.1000}} |
4 |
{{Precision|1111111111.10000}} |
5 |
{{Precision|1111111111}} |
0 |
{{Precision|1111111110}} |
-1 |
{{Precision|1111111100}} |
-2 |
{{Precision|1111111000}} |
-3 |
{{Precision|1111110000}} |
-4 |
{{Precision|1111100000}} |
-5 |
{{Precision|1111000000}} |
-6 |
{{Precision|1110000000}} |
-7 |
{{Precision|1100000000}} |
-8 |
{{Precision|0}} |
0 |
{{Precision|1}} |
0 |
{{Precision|22.45}} |
2 |
{{Precision|22.12345}} |
5 |
{{Precision|22}} |
0 |
{{Precision|22000}} |
-3 |
{{Precision|-15.275}} |
3 |
{{Precision|-15.2500}} |
4 |
{{Precision|23000222000111.432}} |
3 |
{{Precision|-15.123}} |
3 |
{{Precision|0.09}} |
2 |
{{Precision|0.88}} |
2 |
{{Precision|880000}} |
-4 |
{{Precision|90000000}} |
-7 |
Pepijat yang dikenali
- Untuk nombor dalam notasi ilmiah, ketepatan biasanya dikembalikan terlalu rendah dengan tempat 1 perpuluhan. Contoh: {{precision |7.1234E+06}} → -2 (haruslah tepat dengan 4 digit perpuluhan, bukan 3).
Nota teknikal
- NOTA A1: Templat ini menentukan ketepatan perpuluhan dengan mengira panjang rentetan angka (dalam #switch membandingkan panjang tali berlapis), kemudian tolak panjang integer, tolak titik perpuluhan, dan tolak 1 jika negatif. Untuk integer, 1 tempat dikurangkan untuk setiap jejak 0 pada integer. Untuk pecahan, mana-mana kiraan sebelum dibersihkan x 0, kemudian mengembalikan logaritma asas sepuluh penyebut: (..sebelumnya...)*0 + (Dalam denom / Dalam 10).
- NOTA D2: Pemeriksaan, untuk integer, membandingkan jumlahnya dengan tambahan "0" pada akhir: apabila jumlahnya adalah perpuluhan, maka nilainya tidak berubah dengan menambahkan 0 pada akhir: jadi 5.23 = 5.230 adalah benar, manakala bagi keseluruhan integer, ia akan menjadi: 5 = 50 sebagai salah, kerana nilai (value) menjadi n*10 untuk integer n. Jadi, untuk integer n, semakan menolak: n = n0 sebagai salah; oleh itu n adalah integer.
- NOTA M3: Magnitud bahagian integer dikira dengan logaritma aras nilai mutlak (dibahagikan dengan logaritma asli daripada 10 untuk disesuaikan e=2.71828*), sebagai: ln (aras( abs(-0.050067) )+0.99 )/ln10 Aras fungsi(x) memangkas bahagian perpuluhan, untuk meninggalkan keseluruhan kiraan: 0-9 menghasilkan 0, 10-19 sebagai 1, 1000-1999 sebagai 3. abs(x) mengelakkan aras negatif, aras(-0.1)= -1, oleh itu menggunakan abs(x) memastikan -0.1 aras hingga 0 bukan -1. Hampir sifar, +0.99 mengelakkan log 0 yang tidak sah, tetapi tidak membundarkan perpuluhan, sudahpun melaras sebagai nnn.00. Kerumitan adalah operasi 6: aras abs( {1} ) +0.99 kemudian log10x (lnx ÷ ln10), kemudian aras nisbah logaritma. Perpuluhan -1 < x < 1 menghasilkan -1, mengelakkan log 0.001 = -3.
- NOTA N4: Penyediaan templat if-else dan nested dikurangkan minimum, kerana had MediaWiki 1.6 40 tahap jika-logik untuk semua templat nested yang digunakan bersama. Templat {ordomag} dihilangkan untuk mengelakkan 2 lagi templat nested. Templat {Precision} mempunyai 8 tahap, dan templat ini dipangkas menjadi 5 tahap sahaja.
- NOTA S5: #switch dijalankan dengan "x" ditambahkan di hadapan jumlah, jika tidak #switch akan dibandingkan sebagai angka di mana "2" akan sepadan dengan "2.0" walaupun "2" adalah panjang 1 jadi "x2" tidak lagi sesuai dengan "x2.0" sebagai bukan-angka. #switch akan keluar pada perlawanan pertama, jadi panjang yang lebih kecil dibandingkan terlebih dahulu, untuk mengelakkan perbandingan tambahan bagi rentetan angka yang lebih jarang dan panjang sehingga 41 panjang.
- NOTA W6: Pemeriksaan integer dengan bilangan sifar akhir biasa digunakan n=n/10*10, untuk setiap kekuatan 10, di mana jutaan keseluruhan sepadan: {{#ifexpr: {1}=aras( {1}/1E6 )*1E6| }} Sebelumnya, {Precision} telah cuba menggunakan "bulat" untuk mengesan akhir sifar tetapi "bulat" kehilangan ketepatan pada -5, jadi, n00000 bulat -5 berbeza daripada n00000 sedikit, dan perbandingan dengan jumlah bulat yang tepat gagal menandingi beberapa nombor ketika 6 atau lebih sifar "n000000".
- NOTA Z7: Pemeriksaan sifar untuk 0,00000 membandingkan penambahan 1 pada jumlahnya, berbanding menambahkan "1" pada akhir: jika jumlahnya adalah perpuluhan, kemudian menambahkan 1 akan lebih besar daripada menambahkan 1 pada akhir: 0.00 + 1 > 0.001, sedangkan untuk keseluruhan sifar, akan menjadi: 0 + 1> 01 sebagai salah, kerana nilainya sama. Jadi, untuk bilangan bulat 0, semakan menolak: 0 + 1> 01 sebagai salah; oleh itu keseluruhan 0 adalah integer.