2011-10-07 39 views
14

Tôi đang sử dụng cú pháp sau C++ để ra một giá trị dấu chấm động trên một nền tảng Windows:C++ printf với% f nhưng cục bộ cho đất nước của người dùng

printf("%.2f", 1.5); 

Nó hoạt động tốt nếu tôi chạy nó trên một Tiếng Anh tài khoản người dùng. Giả định của tôi là nếu tôi chạy nó, nói rằng tài khoản người dùng của Pháp, đầu ra sẽ là 1,50 thay vì 1,50.

Tại sao tôi không nhìn thấy và cách tạo kết quả mong muốn?

Trả lời

16

Ký tự gốc (tức là '.' Hoặc ',') được định nghĩa bởi ngôn ngữ hiện tại. Ngôn ngữ mặc định (ít nhất là cho các hệ thống Windows) là "C", định nghĩa '.' như ký tự radix.

Bạn có thể đặt ngôn ngữ hiện tại cho chương trình C/C++ bằng cách sử dụng chức năng setlocale.

Để thiết lập miền địa phương cho miền địa phương hệ thống/user hiện tại, bạn có thể sử dụng câu lệnh sau:

#include <locale.h> 
setlocale(LC_ALL, ".OCP"); 

Xem here (cf. các ví dụ trên trang liên kết ...) để biết thêm thông tin về setlocale

+0

Cảm ơn, nhưng khi nào tôi phải gọi setlocale - ngay từ đầu khi ứng dụng khởi hoặc trước mỗi printf? – ahmd0

+1

Đủ để gọi nó ngay khi bắt đầu ứng dụng của bạn. – MartinStettner

+2

Cách thay thế C++ là 'std :: cout.imbue (std :: locale (" "));' – MSalters

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