#string-conversion #float #display #double #floating-point #dtoa


Configurable floating point number to string conversions, with many options for controlling various aspects of displaying floats

3 releases (breaking)

0.3.0 May 4, 2021
0.2.0 Mar 24, 2021
0.1.0 Jun 4, 2020

#159 in Value formatting

Download history 1364/week @ 2024-01-03 947/week @ 2024-01-10 1423/week @ 2024-01-17 1504/week @ 2024-01-24 2215/week @ 2024-01-31 3203/week @ 2024-02-07 2211/week @ 2024-02-14 2042/week @ 2024-02-21 1720/week @ 2024-02-28 2276/week @ 2024-03-06 2058/week @ 2024-03-13 2060/week @ 2024-03-20 1833/week @ 2024-03-27 1906/week @ 2024-04-03 1938/week @ 2024-04-10 1766/week @ 2024-04-17

7,885 downloads per month
Used in 50 crates (6 directly)


694 lines

Pretty dtoa

Configurable float and double printing. pretty_dtoa Comes with lots of options for configuring different aspects of displaying floats, and has only 1 dependency total (including dependencies of dependencies), for very fast compile times.

This crate uses the ryu-floating-decimal crate (itself a fork of the ryu crate) to generate a "floating decimal", or a floating point with radix 10, and then it uses formatting rules particular to the configuration to create a formatted string.

This module is only slightly slow (usually between 1x and 2x slower than the default Display implementation for f64). Benchmarks can be run with cargo bench.

Consider using pretty_dtoa if the default behavior of Display and alternative float printing libraries like ryu is not ideal for one reason or another


use pretty_dtoa::{dtoa, FmtFloatConfig};

let config = FmtFloatConfig::default()
     .force_no_e_notation()      // Don't use scientific notation
     .add_point_zero(true)       // Add .0 to the end of integers
     .max_significant_digits(4)  // Stop after the first 4 non-zero digits
     .radix_point(',')           // Use a ',' instead of a '.'
     .round();                   // Round after removing non-significant digits

 assert_eq!(dtoa(12459000.0, config), "12460000,0");

See the tests in src/lib.rs for examples of each feature, and the documentation to see all configurable features.