Если вы хотите напечатать текстовое представление float
в файл, возможно, самое простое:
output_string outf (string_of_float myfloat)
Если вы хотите распечатать поплавок на консоли, вы можете использовать
print_string (string_of_float myfloat)
Конечно, Printf.printf
также может делать это и многое другое, поэтому стоит это знать.
Если вы хотите вывести двоичное представление float
, все будет сложнее. Поскольку значение float
представляется как IEEE 754 double , его длина составляет 8 байтов, что может быть записано в разных порядках в зависимости от платформы. В случае порядка с прямым порядком байтов , как обычно в X86, вы можете использовать следующее:
let output_float_le otch fv =
let bits = ref (Int64.bits_of_float fv) in
for i = 0 to 7 do
let byte = Int64.to_int (Int64.logand !bits 0xffL) in
bits := Int64.shift_right_logical !bits 8;
output_byte otch byte
done
Значение float
, записанное таким образом, может быть прочитано следующим образом:
let input_float_le inch =
let bits = ref 0L in
for i = 0 to 7 do
let byte = input_byte inch in
bits := Int64.logor !bits (Int64.shift_left (Int64.of_int byte) (8 * i))
done;
Int64.float_of_bits !bits
Преимущество этого метода в том, что он очень компактен для точного сохранения float
s в файле, то есть то, что вы пишете, будет прочитано в точности так, как оно было изначально. Например, я сделал это на интерактивном верхнем уровне:
# let otch = open_out_bin "Desktop/foo.bin" ;;
val otch : out_channel = <abstr>
# output_float_le otch 0.5 ;;
- : unit = ()
# output_float_le otch 1.5 ;;
- : unit = ()
# output_float_le otch (1. /. 3.) ;;
- : unit = ()
# close_out otch ;;
- : unit = ()
# let inch = open_in_bin "Desktop/foo.bin" ;;
val inch : in_channel = <abstr>
# input_float_le inch ;;
- : float = 0.5
# input_float_le inch ;;
- : float = 1.5
# input_float_le inch ;;
- : float = 0.333333333333333315
# close_in inch ;;
- : unit = ()
и, как вы видите, я получил именно то, что положил в файл. Недостаток этой формы записи чисел с плавающей точкой состоит в том, что результат не читается человеком (в действительности файл является двоичным по определению), и вы теряете возможность взаимодействия с другими программами, такими как, например, Excel. , которые обычно обмениваются данными в удобочитаемой текстовой форме (CSV, XML и т. д.).