Jawaban:
toFixed(n)
memberikan n
panjang setelah koma desimal; toPrecision(x)
memberikan x
panjang total.
Ref di w3schools: toFixed dan toPrecision
EDIT :
Saya belajar beberapa waktu yang lalu bahwa w3schools bukanlah sumber terbaik, tapi saya lupa tentang jawaban ini sampai saya melihat komentar kzh, eh, "antusias". Berikut adalah referensi tambahan dari Mozilla Doc Center untuktoFixed()
dan untuktoPrecision()
. Untungnya bagi kita semua, MDC dan w3sekolah setuju satu sama lain dalam kasus ini.
Untuk kelengkapan, saya harus menyebutkan bahwa toFixed()
setara dengan toFixed(0)
dan toPrecision()
hanya mengembalikan nomor asli tanpa pemformatan.
toPrecision(x)
tidak "memberikan x
panjang total", itu memformat ke sejumlah digit signifikan yang diberikan. Misalnya, 0.0000022.toPrecision(1)
akan kembali 0.000002
.
toPrecision(x)
memberikan x
panjang total." tidak selalu berlaku. Contoh penghitung:0.00001234.toPrecision(3)
Saya percaya bahwa yang pertama memberi Anda sejumlah tempat desimal tetap, sedangkan yang terakhir memberi Anda sejumlah digit signifikan yang tetap.
Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"
Selain itu, toPrecision
akan menghasilkan notasi ilmiah jika terdapat lebih banyak digit bilangan bulat dalam bilangan tersebut daripada presisi yang ditentukan.
(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"
EDIT: Oh, dan jika Anda baru mengenal JavaScript, saya sangat merekomendasikan buku " JavaScript: The Good Parts " oleh Douglas Crockford.
Contoh berbicara dengan jelas:
var A = 123.456789;
A.toFixed() // 123
A.toFixed(0) // 123
A.toFixed(1) // 123.5
A.toFixed(2) // 123.46
A.toFixed(3) // 123.457
A.toFixed(4) // 123.4568
A.toFixed(5) // 123.45679
A.toFixed(6) // 123.456789
A.toFixed(7) // 123.4567890
A.toFixed(8) // 123.45678900
A.toFixed(9) // 123.456789000
A.toFixed(10) // 123.4567890000
A.toFixed(11) // 123.45678900000
A.toPrecision() // 123.456789
A.toPrecision(0) // --- ERROR ---
A.toPrecision(1) // 1e+2
A.toPrecision(2) // 1.2e+2
A.toPrecision(3) // 123
A.toPrecision(4) // 123.5
A.toPrecision(5) // 123.46
A.toPrecision(6) // 123.457
A.toPrecision(7) // 123.4568
A.toPrecision(8) // 123.45679
A.toPrecision(9) // 123.456789
A.toPrecision(10) // 123.4567890
A.toPrecision(11) // 123.45678900
Saya pikir ini paling baik dijawab dengan sebuah contoh.
Katakanlah Anda memiliki data berikut:
var products = [
{
"title": "Really Nice Pen",
"price": 150
},
{
"title": "Golf Shirt",
"price": 49.99
},
{
"title": "My Car",
"price": 1234.56
}
]
Anda ingin menampilkan setiap produk ini dengan judul dan harga yang diformat. Mari coba gunakan toPrecision
dulu:
document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));
The price of Really Nice Pen is $150.00
Terlihat bagus, jadi Anda mungkin berpikir ini juga akan berhasil untuk produk lain:
document.write("The price of " + products[1].title + " is $" + products[2].price.toPrecision(5));
document.write("The price of " + products[2].title + " is $" + products[2].price.toPrecision(5));
The price of Golf Shirt is $49.990
The price of My Car is $1234.6
Tidak begitu baik. Kita dapat memperbaikinya dengan mengubah jumlah digit signifikan untuk setiap produk, tetapi jika kita mengulangi rangkaian produk, itu bisa rumit. Mari kita gunakan toFixed
sebagai gantinya:
document.write("The price of " + products[0].title + " is $" + products[0].price.toFixed(2));
document.write("The price of " + products[1].title + " is $" + products[2].price.toFixed(2));
document.write("The price of " + products[2].title + " is $" + products[2].price.toFixed(2));
The price of Really Nice Pen is $150.00
The price of Golf Shirt is $49.99
The price of My Car is $1234.56
Ini menghasilkan apa yang Anda harapkan. Tidak perlu menebak, dan tidak ada pembulatan.
Hanya:
49.99.toFixed(5)
// → "49.99000"
49.99.toPrecision(5)
// → "49.990"
Dalam keadaan tertentu, toPrecision()
akan mengembalikan notasi eksponensial, sedangkan toFixed()
tidak akan.
toExponential()
merupakan fungsi tersendiri .
a = 999999999999999934464;
, a.toFixed(0)
kembali "1e+21"
. Mungkin jawaban yang lebih akurat adalah bahwa toFixed () tidak mengembalikan notasi eksponensial kecuali toString () melakukannya.
Sebagai contoh, kita menganggap variabel a sebagai, var a = 123.45 a.toPrecision (6) Outputnya 123.450 a.toFixed (6) Outputnya seperti 123.450000 // 6 digit setelah koma desimal
Keduanya toPrecision()
dan toFixed()
merupakan fungsi yang dirancang untuk memformat angka sebelum dicetak. Jadi, keduanya mengembalikan String
nilai.
Ada satu pengecualian. Jika Anda menggunakan fungsi ini pada literal Angka negatif , karena prioritas operator, Angka dikembalikan. Artinya, toFixed()
atau toPrecision()
akan mengembalikan string terlebih dahulu, lalu -
operator minus akan mengubah string kembali menjadi Angka sebagai nilai negatif. Silakan lihat di bawah untuk contoh.
toPrecision()
mengembalikan String
mewakili objek Angka dalam titik tetap atau notasi eksponensial dibulatkan ke digit signifikan. Jadi jika Anda menetapkan bahwa Anda menginginkan presisi 1, ia mengembalikan angka signifikan pertama bersama dengan notasi ilmiah untuk menunjukkan pangkat 10 atau 0 sebelumnya sebelum titik desimalnya jika bilangan signifikannya <0.
const num1 = 123.4567;
// if no arguments are passed, it is similar to converting the Number to String
num1.toPrecision(); // returns "123.4567
// scientific notation is used when you pass precision count less than total
// number of digits left of the period
num1.toPrecision(2); // returns "1.2e+2"
// last digit is rounded if precision is less than total significant digits
num1.toPrecision(4); // returns "123.5"
num1.toPrecision(5); // returns "123.46"
const largeNum = 456.789;
largeNum.toPrecision(2); // returns "4.6e+2"
// trailing zeroes are added if precision is > total digits of the number or float
num1.toPrecision(9); // returns "123.456700"
const num2 = 123;
num2.toPrecision(4); // returns "123.0"
const num3 = 0.00123;
num3.toPrecision(4); // returns "0.001230"
num3.toPrecision(5); // returns "0.0012300"
// if the number is < 1, precision is by the significant digits
num3.toPrecision(1); // returns "0.001"
toFixed()
mengembalikan String
mewakili objek Angka dalam notasi titik tetap, dibulatkan. Fungsi ini hanya peduli pada angka koma desimal
const num1 = 123.4567;
// if no argument is passed, the fractions are removed
num1.toFixed(); // returns "123"
// specifying an argument means you the amount of numbers after the decimal point
num1.toFixed(1); // returns "123.5"
num1.toFixed(3); // returns "123.457"
num1.toFixed(5); // returns "123.45670"
num1.toFixed(7); // returns "123.4567000"
// trying to operator on number literals
2.34.toFixed(1); // returns "2.3"
2.toFixed(1); // returns SyntaxError
(2).toFixed(1); // returns "2.0"
(2.34e+5).toFixed(1); // returns "234000.0"
Saya sebutkan di atas pengecualian di mana menggunakan fungsi-fungsi ini pada literal Angka negatif akan mengembalikan Angka dan bukan String karena prioritas operator. Berikut beberapa contohnya:
// Note: these are returning as Number
// toPrecision()
-123.45.toPrecision(); // returns -123.45
-123.45.toPrecision(2); // returns -120
-123.45.toPrecision(4); // returns -123.5
-2.34e+2.toPrecision(1); // returns -200
-0.0456.toPrecision(1); // returns -0.05
-0.0456.toPrecision(6); // returns -0.0456
// toFixed()
-123.45.toFixed(); // returns -123.45
-123.45.toFixed(1); // returns -123.5
-123.45.toFixed(4); // returns -123.45
-0.0456.toFixed(1); // returns -0
-0.0456.toFixed(6); // -0.0456
Fakta menyenangkan: ada angka nol yang ditandatangani dilihat dari -0.0456.toFixed(1)
Lihat: Apakah +0 dan -0 sama?