Làm sao để bỏ phần thừa trong phần thập phân của số thực khi chuyển sang string

Mình có 1 đoạn code đơn giản sau để chuyển từ 1 số thực double sang 1 chuỗi string bằng to_string():

#include <iostream>
#include <string>

using namespace std;

int main()
{
    double f = 123.456;
    string name = to_string(f);
    cout << name;
    return 0;
}

Kết quả output là 123.456000
Cả compiler của IDEone cũng thế: https://ideone.com/Rfx11M
Không biết có ai biết cách khắc phục điểm này không chỉ cho mình với ạ!

Điểm gì?

Tức là thay vì in ra string name123.456000 như trên thì mình muốn nó chỉ in 123.456 thôi ấy anh.
Cách trong link là bỏ vào stringstream rồi dùng setprecision để quy định số chữ số phần thập phân. Nhưng ở trên phần thập phân chỉ dư mấy số 0 ở đuôi chứ mình có biết có bao nhiêu chữ số phần thập phân đâu mà dùng setprecision() ?

for từ cuối String: Nếu phần tử đó là “0” thì xóa nó đi, còn nếu nó khác “0” thì break; :wink:

1 Like

Ừm, cách này khả thi, nhưng ngoài cách này ra thì còn cách nào ngắn hơn không bạn? (kiểu như chỉ 1 hàm khác để fix chứ ko phải thủ công bằng cách dùng for và delete)

1 Like

Thường người ta yêu cầu lấy 1, 2, 3 chữ số thập phân thôi bạn; nên chỉ có hàm đó thôi.

Sâu xa hơn, những chữ số phía sau có thể là rác (0.1 + 0.2 = ?), do độ chính xác bị hạn chế :smiley: nên cái use-case của bạn ko có.

3 Likes

Có cách nào rút gọn từ số 1,2345 còn 1,23 k ạ
( Lập trình c++)

double d = 1.2345;
d = static_cast<int>( d* 100)/100.0;
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?