2012-03-07 42 views
46

Tôi đang cố gắng tìm ra lý do tại sao String.format() hoạt động theo cách của nó.String.format() và số thập phân trong Java

Bối cảnh: Lớp lập trình hệ thống, viết trình biên dịch.

Có một trường lục giác 5 ký tự trong tệp đối tượng mà tôi đang tạo từ một giá trị.

Cố gắng sử dụng: String.format("%05X", decInt);

này hoạt động như dự định cho các số dương (11 ->0000B) Tuy nhiên nó không cho số âm (-1 ->FFFFFFFF thay vì FFFFF)

Tôi cho rằng Tôi chỉ có thể lấy một chuỗi con của 5 ký tự cuối cùng, nhưng tôi vẫn muốn tìm ra lý do tại sao nó hoạt động theo cách này.

+5

Vấn đề là 'chiều rộng' được đặt theo phương pháp định dạng, trong trường hợp này là 5, là chiều rộng tối thiểu. – twain249

Trả lời

66

Chiều rộng được sử dụng ở định dạng luôn là chiều rộng tối thiểu. Trong trường hợp này, thay vì sử dụng các hoạt động chuỗi phụ tôi sẽ đề nghị:

String.format("%05X", decInt & 0xFFFFF); 
11

Format chiều rộng chỉ hoạt động để tạo ra một tối thiểu số chữ số, và chỉ có hiệu lực từ ngày zero hàng đầu.

Thay vì chuỗi, bạn có thể sử dụng một mặt nạ bit:

String.format("%05X", decInt & 0x0FFFFF) 

Bằng cách này, 11 ->0000B, không 0000A như tuyên bố trong câu hỏi của bạn.

+1

Ok, điều đó có ý nghĩa ngay bây giờ. Cũng đã quay lại và sửa đổi A-> B, cổ vũ – Fitzoh

Các vấn đề liên quan