Tôi đang cố in tối đa 4 chữ số sau dấu thập phân trong C++ (Sử dụng luồng). Vì vậy, nếu số lượng không cần 4 chữ số sau số thập phân tôi muốn nó chỉ sử dụng số thập phân mà nó thực sự cần.In tối đa 4 số thập phân
Ví dụ:
1.12345 -> 1.1234
1.0 -> 1
1.12 -> 1.12
1.12345789 -> 1.1234
123.123 -> 123.123
123.123456 -> 123.1234
tôi đã cố gắng std::setprecision(4)
nhưng mà bộ số lượng đáng kể chữ số và thất bại trong trường hợp kiểm tra:
123.123456 gives 123.1
Tôi cũng đã cố gắng đưa ra std::fixed
cùng với std::setprecision(4)
nhưng đó đưa ra một số chữ số cố định sau số thập phân ngay cả khi không cần:
1.0 gives 1.0000
Có vẻ như std::defaultfloat
là cái tôi cần và không cố định cũng như không theo cấp số mũ. Nhưng nó dường như không in số chữ số sau thập phân một cách thích hợp và chỉ có một tùy chọn cho các chữ số có nghĩa.
Điều này sẽ yêu cầu mã tùy chỉnh, làm việc trên một biểu diễn BCD hoặc chuỗi của giá trị được in. Lưu ý rằng, bởi vì biểu diễn bên dưới của số dấu phẩy động là nhị phân, không nhất thiết phải là một biểu diễn nhị phân chính xác (nói) 123.123. Nếu bạn hiển thị đủ số thập phân, cái gì đó như 'double x = 123.123; cout << x' có thể xuất ra một cái gì đó như '123.1230000001'. Do đó, tôi khuyên bạn nên viết một hàm chuyển đổi số double thành chuỗi có bốn chữ số thập phân và sau đó xóa bất kỳ số 0 dấu sau dấu thập phân trước khi trả về chuỗi. – Simon
Ví dụ của bạn không khớp với mô tả sự cố của bạn. Nhìn vào những ví dụ đó, nó giống như bạn muốn không quá 4 số thập phân, mà không có bất kỳ dấu 0 nào. Điều đó chắc chắn không giống như chính xác 4 số thập phân. Bên cạnh đó, như được chỉ ra bởi Simon, với bản chất của việc thể hiện các giá trị điểm nổi IEEE, bạn sẽ phải tạo ra một đặc điểm kỹ thuật tốt hơn cho cụm từ * "cần chữ số" * được cho là có ý nghĩa gì. – IInspectable
[Điều mà mọi nhà khoa học máy tính cần biết về số học dấu chấm động] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) có lẽ là bắt buộc phải đọc. – IInspectable