PDA

View Full Version : Cho em hỏi tí mấy bác ơi!



newcomer14
08-08-2006, 10:31
Hiện em đang sử dụng CSDL MS SQL Server 2000, e có sử dụng 1 table ChiTietNhapKho(DHN, MSVT, DVT, ..., SL, DG), có filed SL (Kiểu Float), DG (Kiểu Float), khi em nhập vào SL=16.89 và DG=1.
- Nhung khi em dung câu "Select SL*DG from ChiTietNhapKho"
- Thi dòng mà có dữ liệu như e nhập ở trên sẽ xuất ra là = 16.889999999...

Em chỉ muốn lấy ra là: 16.89 thôi, mà không cần dùng phương thức nào để làm tròn, bởi vì nguyên là lúc nhập là em nhập 16.89

Thế các bác có ai biết chỉ em với, thanks!

Blue.Start.Heart
08-08-2006, 12:06
Hiện em đang sử dụng CSDL MS SQL Server 2000, e có sử dụng 1 table ChiTietNhapKho(DHN, MSVT, DVT, ..., SL, DG), có filed SL (Kiểu Float), DG (Kiểu Float), khi em nhập vào SL=16.89 và DG=1.
- Nhung khi em dung câu "Select SL*DG from ChiTietNhapKho"
- Thi dòng mà có dữ liệu như e nhập ở trên sẽ xuất ra là = 16.889999999...

Em chỉ muốn lấy ra là: 16.89 thôi, mà không cần dùng phương thức nào để làm tròn, bởi vì nguyên là lúc nhập là em nhập 16.89

Thế các bác có ai biết chỉ em với, thanks!

SELECT CONVERT(decimal(10,2), SL*DG)
FROM ChiTietNhapKho

10 là số con số biểu diễn phần nguyên (trước dấu chấm).
2 là số con số biểu diễn phần thập phân (sau dấu chấm).

newcomer14
09-08-2006, 09:03
Nhưng nếu như SL của em nhập là 16.887 thì nó cũng ra là 16.89, bác có thể giúp em là vẫn lấy ra là 16.887. Hay ví dụ như em nhập các số lẻ khác nhau có khi lên tới 2,4,5 ... số lẻ.
Thì có cách nào e vẫn lấy đầy đủ số lẻ như lúc nhập vào không?

Blue.Start.Heart
09-08-2006, 11:22
Dùng hàm LEN() để xác định chiều dài chuỗi

phatnq2003
09-08-2006, 17:02
Bạn newcomer14 thử đổi sang kiểu decimal(28, 8) thử xem.

xbacala
09-08-2006, 19:53
nên đổi kiểu của field DG thành NUMERIC(18,2) thay vì FLOAT. FLOAT là kiểu dấu chấm động nên khó kiểm soát.

NUMERIC(18,2)
Precision: 18
Scale: 2
Có tối đa 18 kí số trong đó có 2 số trong phần thập phân (không tính dấu . và - nếu là số âm !)

Ví dụ, kiểu NUMERIC(5,2) thì có giá trị:
-999.99 đến 999.99

newcomer14
18-08-2006, 11:29
Cảm ơn các bác nha, để em thử cái xem có gì em hỏi tiếp!


Dùng hàm LEN() để xác định chiều dài chuỗi

Thử như vậy đúng không bác.

SELECT CONVERT(decimal(10,LEN(SL)), SL*DG)
FROM ChiTietNhapKho

Cái này nó báo lỗi: Incorrect syntax near 'len' bác help em với.Em kiểm tra rồi mà không biết làm sao cả.

xbacala
18-08-2006, 19:49
Có 2 chỗ sai trong câu quẻy trên:
- Hàm LEN chỉ work với kiểu chuỗi
- Thống số thứ 2 của kiểu DECIMAL phải là hằng số chứ không thể là LEN(SL) được

Sửa thành như sau:
SELECT CONVERT(decimal(10,2), SL*DG)
FROM ChiTietNhapKho

hoặc


SELECT CAST(SL*DG AS decimal(10,2))
FROM ChiTietNhapKho

newcomer14
23-08-2006, 14:24
Có 2 chỗ sai trong câu quẻy trên:
- Hàm LEN chỉ work với kiểu chuỗi
- Thống số thứ 2 của kiểu DECIMAL phải là hằng số chứ không thể là LEN(SL) được

Sửa thành như sau:
SELECT CONVERT(decimal(10,2), SL*DG)
FROM ChiTietNhapKho

hoặc


SELECT CAST(SL*DG AS decimal(10,2))
FROM ChiTietNhapKho

Bác ơi làm như vậy mà thỏa được ý em thì là ok rùi nhưng bác xem lại giúp em cái, ở đây em cần khác.Bác có thể đọc lại những thắc mắc của em ở trên.Dẫu sao cũng cảm ơn bác nhiều!

xbacala
23-08-2006, 19:41
Đơn giản nhất là đổi lại dât type:

nên đổi kiểu của field DG thành NUMERIC(18,2) thay vì FLOAT. FLOAT là kiểu dấu chấm động nên khó kiểm soát.

NUMERIC(18,2)
Precision: 18
Scale: 2
Có tối đa 18 kí số trong đó có 2 số trong phần thập phân (không tính dấu . và - nếu là số âm !)

Ví dụ, kiểu NUMERIC(5,2) thì có giá trị:
-999.99 đến 999.99

thangdung
23-08-2006, 21:39
Tui thấy mấy bác trên trả lời là đúng rồi, but mà khi hiển thị trên SQL query analyzer thì nó vẫn ra 16.889999999...
để hiển thị số đẹp thì vào Tool/option chọn tab Connection sau đó check vào option "Use regional settings when display currency,number,date,and times" việc còn lại thì vào Control panel/Regional setting chỉnh cho đúng là được