2015-03-27 15 views
12

Tôi đã sử dụng thông số định dạng số %e. Đã thử %3.2e hoặc %4.3e.In giá trị số mũ không đổi bằng cách sử dụng printf trong c

Ví dụ:
nếu var=0.001342, sau đó tôi muốn in 0.1342e-02. Nhưng in 1.342e-03
nếu var=0.543124, sau đó tôi muốn in 54.3124e-02. Nhưng in 5.43124e-01
nếu var=0., sau đó tôi muốn in 1.23653e-02.

Đó là giá trị bao giờ có thể là giá trị, tôi chỉ muốn sửa giá trị số mũ của mình để in kết quả.

+0

Vui lòng cung cấp mã bạn đã thử – 0aslam0

+0

định dạng thông số theo sau '% [flags] [width] [. precision] [length] specifier' prototype –

+0

bạn cần phải viết chức năng in của riêng bạn nếu bạn muốn rằng –

Trả lời

6

Từ hướng dẫn:

eE Đối số kép được làm tròn và chuyển đổi trong phong cách [-] d.ddde + -dd nơi có một chữ số trước khi nhân vật số thập phân điểm và số chữ số sau khi nó bằng với độ chính xác; nếu độ chính xác bị thiếu, nó được lấy là 6; nếu độ chính xác của bằng 0, không xuất hiện ký tự dấu thập phân. Chuyển đổi E sử dụng chữ cái E' (rather than e ') để giới thiệu số mũ . Số mũ luôn chứa ít nhất hai chữ số; nếu giá trị là zero, số mũ là 00.

eE là dành cho các ký hiệu khoa học, vì vậy chỉ có một phi chữ số nul trước dấu thập phân.

Bạn cần phải thực hiện việc chuyển đổi của mình, như:

float number = 0.01023; 
float normalized = number*100; 
int mantissa_int_part = normalized; 
int mantissa_decimal_part = (normalized-mantissa_int_part)*10000; 
printf("%02d.%04d e-2",mantissa_int_part,mantissa_decimal_part); 
+0

Lưu ý rằng điều này sẽ không hoạt động với số âm và không làm tròn giá trị đúng cách. – jpa

14

Đó là không thể để xác định số chữ số trước tách số thập phân với định dạng dấu chấm động specifiers chuẩn.

Đó là toàn bộ điểm "ký hiệu khoa học" để có một (hoặc không) chữ số trước dấu thập phân và tất cả thông tin về "điểm thập phân" xuất phát từ số mũ.

Nếu bạn có một số cố định định dạng (luôn luôn e-2), bạn có thể tạo ra một cái gì đó như:

printf("%f e-2", x*100.0); 

Sửa

Hoặc, để làm cho nó thêm standard scientific notation:

printf("%f * 10^-3", x*1e3); 
Các vấn đề liên quan