Saya mencoba menentukan cara terbaik untuk memotong atau menjatuhkan tempat desimal ekstra di SQL tanpa pembulatan. Sebagai contoh:
declare @value decimal(18,2)
set @value = 123.456
Ini secara otomatis akan @value
menjadi 123.46
, yang baik dalam banyak kasus. Namun, untuk proyek ini, saya tidak butuh itu. Apakah ada cara sederhana untuk memotong desimal yang tidak saya butuhkan? Saya tahu saya bisa menggunakan left()
fungsi dan mengkonversi kembali ke desimal. Apakah ada cara lain?
sql
sql-server
tsql
rounding
Ryan Eastabrook
sumber
sumber
Ketika parameter ketiga ! = 0 itu terpotong daripada putaran
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Sintaksis
Argumen
numeric_expression
Merupakan ekspresi dari kategori tipe data numerik yang tepat atau perkiraan, kecuali untuk tipe data bit.length
Apakah presisi yang numeric_expression harus dibulatkan. panjang harus berupa ekspresi tipe tinyint, smallint, atau int. Ketika panjang adalah angka positif, numeric_expression dibulatkan ke jumlah posisi desimal yang ditentukan oleh panjang. Ketika panjang adalah angka negatif, numeric_expression dibulatkan di sisi kiri titik desimal, seperti yang ditentukan oleh panjang.function
Apakah jenis operasi yang harus dilakukan. fungsi harus tinyint, smallint, atau int. Ketika fungsi dihilangkan atau memiliki nilai 0 (default), numeric_expression dibulatkan. Ketika nilai selain 0 ditentukan, numeric_expression terpotong.sumber
sumber
Inilah cara saya dapat memotong dan tidak membulat:
mengembalikan 100.0010
Dan contoh Anda:
mengembalikan 123.450
Sekarang jika Anda ingin menghilangkan nol akhir, cukup masukkan:
mengembalikan 123.45
sumber
Sebenarnya apa pun parameter ketiga, 0 atau 1 atau 2, tidak akan membulatkan nilai Anda.
sumber
Putaran memiliki parameter opsional
sumber
Anda ingin desimal atau tidak?
Jika tidak, gunakan
Jika Anda melakukannya dengan 0 maka lakukan putaran:
sumber
Potong lainnya tanpa solusi pembulatan dan contoh.
sumber
Floor()
yang merupakan cara untuk menjatuhkan desimal tanpa pembulatan. Lantai terlalu buruk () tidak memiliki parameter kedua untuk menunjukkan di posisi mana. Tapi saya pikir * 10) / 10 bekerja dengan sangat baik.Ini akan menghapus bagian desimal dari angka apa pun
sumber
Akan memberi Anda 2 nilai setelah titik desimal. (MS SQL SERVER)
sumber
Cara lain adalah
ODBC TRUNCATE
fungsi:LiveDemo
Keluaran:
Ucapan:
Saya sarankan menggunakan
ROUND
fungsi bawaan dengan parameter ke-3 diatur ke 1.sumber
Saya tahu ini agak terlambat tetapi saya tidak melihatnya sebagai jawaban dan telah menggunakan trik ini selama bertahun-tahun.
Cukup kurangi 0,005 dari nilai Anda dan gunakan Round (@ num, 2).
Contoh Anda:
mengembalikan 123.45
Secara otomatis akan menyesuaikan pembulatan ke nilai yang benar yang Anda cari.
Omong-omong, apakah Anda membuat ulang program dari film Office Space?
sumber
Coba gunakan kode ini untuk mengonversi 3 nilai desimal setelah satu titik menjadi 2 tempat desimal:
Outputnya adalah 123,46
sumber
Saya pikir Anda hanya menginginkan nilai desimal, dalam hal ini Anda dapat menggunakan yang berikut:
sumber
Saya tahu pertanyaan ini benar-benar tua tetapi tidak ada yang menggunakan sub-string untuk membulatkan. Ini sebagai keuntungan kemampuan untuk membulatkan angka yang sangat panjang (batas string Anda di SQL server yang biasanya 8000 karakter):
sumber
Saya pikir kita bisa lebih mudah dengan solusi contoh sederhana yang ditemukan di Hackerrank:
Solusi Di atas memberi Anda ide bagaimana membuat nilai terbatas pada 4 poin desimal. Jika Anda ingin menurunkan atau menambah angka setelah desimal, ubah saja 4 menjadi apa pun yang Anda inginkan.
sumber
Mod(x,1)
adalah cara termudah yang saya pikirkan.sumber
sumber