2015-03-27 11 views
12

Użyłem formatu specyfikatora formatu %e. Wypróbowałem %3.2e lub %4.3e.Drukuj stałą wartość wykładnika za pomocą printf w c

Przykład:
jeśli var=0.001342, następnie chcę wydrukować 0.1342e-02. Ale drukuje 1.342e-03
jeśli var=0.543124, to chcę wydrukować 54.3124e-02. Ale drukuje 5.43124e-01
jeśli var=0., następnie chcę wydrukować 1.23653e-02.

To może być wartość, po prostu chcę poprawić moją wartość wykładniczą i wydrukować wynik.

+0

Proszę podać kod, który już wypróbowałeś – 0aslam0

+0

Format specyfikatora następuje po '% [flagi] [szerokość] [dokładność] [długość] prototyp specifier –

+0

musisz napisać własną funkcję drukowania, jeśli chcesz to –

Odpowiedz

6

Z instrukcji:

EE Podwójna argumentem jest zaokrąglona i przekształcony w stylu [-] d.ddde + -dd gdzie znajduje się jedna cyfra przed dziesiętny punkt charakter i liczba cyfr po tym, jak jest równa dokładności; w przypadku braku dokładności przyjmuje się 6; jeśli dokładność wynosi zero, nie pojawia się znak dziesiętny. Konwersja E używa litery E' (rather than e ') do wprowadzenia wykładnika . Wykładnik zawsze zawiera co najmniej dwie cyfry; jeśli wartość wynosi zero, wykładnik jest 00.

eE jest w notacji naukowej, więc tylko jeden nie nul cyfra przed przecinkiem.

Musisz zrobić konwersję przez siebie, jak:

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

Pamiętaj, że to nie zadziała dla liczb ujemnych i nie zaokrągla wartości poprawnie. – jpa

14

To nie możliwe, aby określić liczbę cyfr przed separator dziesiętny ze standardowymi formatami pływających punkt.

Jest to cały punkt "notacji naukowej", aby mieć jedną (lub zero) cyfr przed kropką dziesiętną, a wszystkie informacje o "gdzie jest przecinek dziesiętny" pochodzi z wykładnika.

Jeśli masz jakieś ustalonym formacie (zawsze E-2), można uzyskać coś takiego:

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

Edytuj

Lub, aby uczynić go bardziej standard scientific notation:

printf("%f * 10^-3", x*1e3); 
Powiązane problemy