Popatrzmy na poniższy program:
1 program test
2 print *, 0.1e0
3 print *, 0.1e0_8
4 print *, 0.1e0_16
5 print *, 0.1e0 - 0.1e0_8
6 print *, 0.1e0 - 0.1e0_16
7 print *, 0.1e0_16 - 0.1e0_8
8 end program test
Oto wynik jego działania:
0.100000001
0.10000000000000001
1.00000000000000000000000000000000005E-0001
1.4901161138336505E-009
1.49011611938476562499999999518517514E-0009
-5.55111512312578269730333347948601193E-0018
Wnioski każdy wyciąga sam.
Poniżej przykład pokazujący jak można korzystać z innych kodowań: W szczególnych przypadkach można stałą tekstową poprzedzić parametrem kind-param (i znakiem podkreślenia). Do zapisu stałych tekstowych używa się kodowania ASCII. Standard nie przewiduje(?) innych rodzajów kodowania, ale może to być realizowane rozszerzenie, jak w przykładzie:
1 program character_kind
2 use iso_fortran_env
3 implicit none
4 integer, parameter :: ascii = selected_char_kind ("ascii")
5 integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')
6
7 character(kind=ascii, len=26) :: alphabet
8 character(kind=ucs4, len=30) :: hello_world
9
10 alphabet = ascii_"abcdefghijklmnopqrstuvwxyz"
11 hello_world = ucs4_'Hello World and Ni Hao -- ' &
12 // char (int (z'4F60'), ucs4) &
13 // char (int (z'597D'), ucs4)
14
15 write (*,*) alphabet
16
17 open (output_unit, encoding='UTF-8')
18 write (*,*) trim (hello_world)
19 end program character_kind
Wynik działania tego programu jest następujący:
abcdefghijklmnopqrstuvwxyz
Hello World and Ni Hao -- 你好
Zwracam uwagę na konstrukcję tego programu. Po pierwsze wczytywany jest „moduł” iso_fortran_env. Później definiowane są stałe stałe całkowite integer
, parameter, jedna o nazwie ascii (druga ucs4), którym nadawana jest wartość zwracana przez funkcję standardową selected_char_kind
. Kolejna deklaracja zmiennej typu CHARACTER
używa konstrukcję wskazywania explicite typu zmiennej (kind=
). Problem zaczyna się gdy trzeba zakodować „rozszerzone” — używana jest funkcja char
konwertująca wartość całkowitą zadaną jako stałą szesnastkowa, używając kodowania ucs4: char (int (z'4F60'), ucs4)
. Kodowanie ucs4 jest wariantem Unicode, w którym każdy znak kodowany jest na 32 bitach (czterech bajtach). Standardowo edytory i strony WWW używają kodowania UTF-8, w którym każdy znak kodowany spoza zestawu ASCII kodowany jest z użyciem zmiennej liczby bajtów (znaków).