Saya memiliki nomor, misalnya 1.128347132904321674821 yang ingin saya tunjukkan sebagai hanya dua tempat desimal ketika output ke layar (atau ditulis ke file). Bagaimana seseorang melakukan itu?
x <- 1.128347132904321674821
EDIT:
Penggunaan:
options(digits=2)
Telah disarankan sebagai jawaban yang memungkinkan. Apakah ada cara untuk menentukan ini dalam skrip untuk penggunaan satu kali? Ketika saya menambahkannya ke skrip saya sepertinya tidak melakukan hal yang berbeda dan saya tidak tertarik dalam banyak mengetik ulang untuk memformat setiap angka (saya mengotomatisasi laporan yang sangat besar).
-
Jawab: bulat (x, digit = 2)
r
formatting
rounding
r-faq
Brandon Bertelsen
sumber
sumber
controls the number of digits to print when printing numeric values. It is a suggestion only. Valid values are 1...22 with default 7. See the note in print.default about values greater than 15.
dari? opsi itu hanya efek keluaran.round(23, digits=2)
akan dicetak23
dan tidak23.00
. Jika Anda menginginkan yang terakhir, coba stackoverflow.com/a/12135122/180892Jawaban:
Latar Belakang: Beberapa jawaban yang disarankan pada halaman ini (mis.
signif
,options(digits=...)
) Tidak menjamin bahwa sejumlah desimal ditampilkan untuk angka acak. Saya kira ini adalah fitur desain dalam R di mana praktik ilmiah yang baik melibatkan menunjukkan sejumlah digit berdasarkan pada prinsip " angka penting ". Namun, di banyak domain (misalnya, gaya APA , laporan bisnis) persyaratan pemformatan menentukan bahwa sejumlah tempat desimal ditampilkan. Ini sering dilakukan untuk tujuan konsistensi dan standardisasi daripada mementingkan angka-angka penting.Solusi :
Kode berikut menunjukkan tepat dua tempat desimal untuk angka tersebut
x
.Sebagai contoh:
Fungsi yang lebih umum adalah sebagai berikut di mana
x
nomor dank
jumlah desimal untuk ditampilkan.trimws
menghilangkan spasi putih terdepan yang dapat berguna jika Anda memiliki vektor angka.Misalnya,
sumber
0.0001
sebagai0.00
format()
danprettyNum()
mengubah angka menjadi karakter. Bagaimana Anda mengatasinya?format(c(10, 1), nsmall=1)
hasil"10.0" " 1.0"
(perhatikan ruang terdepan di depan angka 1.0. Padahal,sprintf()
fungsi tersebut tampaknya menjamin pemformatan yang lebih baik pada kedua sisi desimal, misalnyasprintf(c(10,1), fmt = '%#.1f')
menghilangkan yang sial ruang terkemuka dan pengembalian"10.0" "1.0"
.format
digunakan dalam kolom.Anda dapat memformat angka, katakanlah
x
, hingga tempat desimal sesuai keinginan. Inix
adalah angka dengan banyak tempat desimal. Misalkan kita ingin menampilkan hingga 8 angka desimal dari angka ini:Di sini
format="f"
memberikan angka mengambang di tempat desimal yang biasa katakan, xxx.xxx, dandigits
menentukan jumlah digit. Sebaliknya, jika Anda ingin mendapatkan bilangan bulat untuk ditampilkan, Anda akan menggunakanformat="d"
(sepertisprintf
).sumber
formatC
hampir secara eksklusif apa yang saya gunakan untuk tujuan ini. Saya pikir jawaban ini baik dan berada di basis R sesuai permintaan OP.Anda dapat mencoba paket saya bisa diformat .
Yang menyenangkan adalah,
x
masih berupa vektor numerik dan Anda dapat melakukan lebih banyak perhitungan dengan format yang sama.Bahkan lebih baik, digit tidak hilang, Anda dapat memformat ulang dengan lebih banyak digit kapan saja :)
sumber
untuk 2 tempat desimal dengan asumsi bahwa Anda ingin tetap membuntuti nol
pemberian yang mana
Seperti @mpag menyebutkan di bawah ini, tampaknya R kadang-kadang dapat memberikan nilai yang tidak terduga dengan ini dan metode bulat misalnya sprintf (5.5550, fmt = '% #. 2f') memberikan 5.55, bukan 5.56
sumber
Sesuatu seperti itu :
Opsi definisi digit:
sumber
digits
opsi tampaknya tidak menetapkan jumlah digit setelah desimal. Misalnya, ketika saya mengatur opsi (digit = 2), kemudian mencetak 7,25 menghasilkan output 7,2, 1234,25 menjadi 1234, dan 0,25 tetap 0,25. Apakah ada opsi lain untuk berinteraksi dengan ini?Periksa fungsi prettyNum, format
untuk memiliki nol percobaan (123.1240 misalnya) gunakan
sprintf(x, fmt='%#.4g')
sumber
sprintf
, ini pada dasarnya adalah kerangka kerja untuk memformatfmt
arg, maaf!g
jawaban Anda adalah untuk digit tetap, menggunakanf
karya lebih baik.Jika Anda lebih suka digit signifikan daripada digit tetap, maka perintah signif mungkin berguna:
sumber
Error: could not find function "fixed"
signif
berfungsi untuk angka tertentu yang disediakan, tetapi saya menganggap masalah yang umum diterapkan adalah ketika Anda harus menunjukkan dua tempat desimal dengan tepat, tetapi Anda tidak tahu nomor apa yang ada di depan. Dalam hal ini,signif
akan memberikan jumlah desimal yang berbeda tergantung pada jumlah sebenarnya.Fungsi
formatC()
ini dapat digunakan untuk memformat angka menjadi dua tempat desimal. Dua tempat desimal diberikan oleh fungsi ini bahkan ketika nilai-nilai yang dihasilkan termasuk nol tambahan.sumber
Saya menggunakan varian ini untuk mencetak desimal K:
sumber
Perhatikan bahwa objek numerik dalam R disimpan dengan presisi ganda , yang memberi Anda (kira-kira) 16 digit desimal presisi - sisanya akan noise. Saya akui bahwa angka yang ditunjukkan di atas mungkin hanya untuk contoh, tetapi panjangnya 22 digit.
sumber
Sepertinya saya ingin menjadi seperti itu
Per sedikit bantuan online .
sumber
format.default(x, digits = 2)
hanya satu tembakan dalam gelap meskipun berdasarkan tautan yang disediakan. Info itu adalah beberapa kekurangan dari apa yang biasanya saya baca untuk dokumentasi, saya berharap untuk melihat hasil cetak juga.jika Anda hanya ingin membulatkan angka atau daftar, cukup gunakan
Kemudian, data akan dibulatkan menjadi 2 desimal.
sumber