2017-09-07 15 views
5

Ở đây vấn đề của tôi: Tôi muốn viết một phao có tối đa 2 chữ số thập phân vào một chuỗi và in nó mà không có một số 0 đằng sau số.C++ float thành chuỗi có độ dài cụ thể

Cách tôi làm điều đó vào lúc này:

Values Material;   // Class 'Values', Object 'Material' 
Material.Temp = 15.56; // 'Temp' = float 

string ss = to_string(Material.Temp); // Conversion to string 
const char* cNumber = ss.c_str();  // Conversion to const char 
HPDF_Page_ShowText(page, cNumber); 

Đó in ra: 15,56000000

HPDF_Page_ShowText là một lệnh của nguồn thư viện libharu mở để tạo PDF-Documents. Nó hy vọng (page-object, *const char). Đó là lý do tại sao chuỗi phải được chuyển đổi thành const char* trước tiên.

Tôi thực sự đã tìm kiếm trên Internet về các vấn đề tương tự nhưng không tìm thấy sự cố nào phù hợp với tôi.

+0

'#include ' có được sử dụng cho bạn không? Bạn có thể sử dụng 'setprecision (2)' và nó sẽ cắt ngắn số dấu phẩy động. Trừ khi bạn thực sự cần nó trong một định dạng chuỗi? – Sailanarmo

Trả lời

5

Sử dụng một hàm std::stringstreamstd::setprecision() kết hợp với std::fixed dòng kẻ thao túng:

#include <iostream> 
#include <iomanip> 
#include <sstream> 
#include <string> 

int main(){ 
    float myfloat = 15.56f; 
    std::stringstream ss; 
    ss << std::fixed << std::setprecision(2) << myfloat; 
    std::string s = ss.str(); 
    std::cout << s; 
} 

Biến const char* có thể thu được thông qua:

const char* c = s.c_str(); 

Cập nhật:
thích std::ostringstream kể từ khi dòng là chỉ được sử dụng cho đầu ra.

+0

Vâng, điều đó đã giúp ích. Cảm ơn nhiều! –

+3

Thay vào đó, bạn nên sử dụng 'std :: ostringstream'. –

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