Định dạng số đến 2 chữ số thập phân


154

Tôi muốn biết làm thế nào tôi có thể xuất một số có 2 chữ số thập phân mà không làm tròn số gốc.

Ví dụ:

2229,999 -> 2229,99

Tôi đã thử:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))

có vẻ như bạn đang cố gắng sử dụng các lệnh để cắt bớt. Tại sao không chỉ sử dụng xây dựng trong funcationality?
Fallenreaper

Bạn không cần số thập phân để được DECIMAL(6,2)). 6- Độ chính xác (số tổng chữ số) và 2 là số chữ số sau số thập phân?
dùng5249203

Câu trả lời:


82

9
Cắt ngắn luôn "làm tròn" xuống. 1,999 rút ngắn thành 2 DP sẽ là 1,99 trong đó 2,00 về mặt toán học sẽ chính xác hơn. Nếu đó không phải là một vấn đề thì cắt ngắn là tốt nhưng bạn nên biết về nó.
GordonM

Tôi đồng ý với GordonM và TRUNCATE nên được sử dụng với quan hệ nhân quả, đặc biệt là với các số dấu phẩy động!
Nebulosar

364

Khi định dạng số đến 2 vị trí thập phân, bạn có hai tùy chọn TRUNCATEROUND. Bạn đang tìm kiếm TRUNCATEchức năng.

Ví dụ:

Không làm tròn:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

docs: http://www.w3resource.com/mysql/mathologists-fifts/mysql-truncate-feft.php

Với làm tròn:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

docs: http://www.w3resource.com/mysql/mathologists-fifts/mysql-round-feft.php


2
bạn nên sử dụng truncateđể định dạng số khi bạn muốn số bị cắt ngắn. cô ấy đã làm cho nó khá rõ ràng trong câu hỏi rằng đây là những gì cô ấy muốn làm. có nhiều cách làm tròn (sàn, trần, cách xa 0, hướng về 0, nửa lên, nửa xuống, nửa chẵn). chúng thích hợp trong các bối cảnh khác nhau.
Kip

16
tất nhiên, nhưng như tôi có thể thấy nhiều người thấy rằng câu trả lời của tôi rất hữu ích hoặc có thể họ đã tìm thấy câu hỏi này khi họ đang tìm kiếm lệnh ROUND. Tôi sẽ để nó như nó là.
jmarceli

"Bạn không nên sử dụng TRUNCATE để định dạng số vì đơn giản là bạn sẽ mất các chữ số bị cắt" => Chà, đó là điểm cắt ngắn ... Tôi không thấy chúng ta nên lấy 0,17 bằng Toán như thế nào. Câu trả lời của bạn là hoàn hảo cho các ví dụ lập trình nhưng nó không kỹ lưỡng lắm.
Benoit Duffez

2
Như tôi đã nói trước đây. Tôi BIẾT rằng đó không phải là một câu trả lời chính xác cho câu hỏi này nhưng mọi người có xu hướng thích nó :) Có thể vì tiêu đề câu hỏi có thể là kết quả tìm kiếm cho một người đang tìm kiếm ROUNDchức năng.
jmarceli

Sau đó, bạn nên sửa nó. Tôi vẫn sẽ có ích cho mọi người, nó sẽ chính xác 100%. Thắng-thắng :)
Benoit Duffez

14

Làm thế nào CAST(2229.999 AS DECIMAL(6,2)) để có được một số thập phân với 2 chữ số thập phân


4
Tôi nghĩ bạn có nghĩa là diễn viên (2229.999 dưới dạng thập phân (4.2))
Chú Iroh

@UncleIroh, Không tôi nghĩ anh ấy thực sự có nghĩa convert(2229.999 as decimal(4,2)).
Pacerier

3
@Pacerier - Cả hai đều hoạt động kỹ thuật. Tuy nhiên, định dạng cho chuyển đổi là convert (2229.999, thập phân (4.2)) bằng dấu phẩy, vì vậy bạn có thể đúng trong đó là những gì anh ấy sẽ làm.
Chú Iroh

@UncleIroh, À đúng rồi, lỗi đánh máy của tôi ở trên. Tôi đã nói về convert(2229.999, decimal(4,2)).
Pacerier

4
CAST (2229.999 AS DECIMAL (4.2)) sẽ cung cấp cho bạn 99,99. DECIMAL là số chữ số tối đa bao gồm 2 ở bên trái của số thập phân. CAST (2229,99 NHƯ QUYẾT ĐỊNH (6,2)) sẽ cung cấp cho bạn 2230.00
russjohnson09

8

Chỉ cần sử dụng mẫu định dạng (số, qtyDecimals): định dạng (1000, 2) kết quả 1000.00


0

Đây là cách tôi sử dụng, đây là một ví dụ:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost

0

Hiển thị dưới dạng thập phân Chọn ifnull (định dạng (100.00, 1, 'en_US'), 0) 100.0

Hiển thị dưới dạng phần trăm Chọn concat (ifnull (định dạng (100.00, 0, 'en_US'), 0), '%') 100%

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.