| #include "double-conversion/double-conversion.h" |
| |
| #define BEGIN_C extern "C" { |
| #define END_C } |
| |
| |
| namespace dc = double_conversion; |
| |
| |
| BEGIN_C |
| |
| int |
| double_to_shortest(char* buf, size_t size, size_t* len, double val) |
| { |
| int flags = dc::DoubleToStringConverter::UNIQUE_ZERO | |
| dc::DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN | |
| dc::DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT | |
| dc::DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT; |
| |
| dc::StringBuilder builder(buf, size); |
| dc::DoubleToStringConverter conv(flags, NULL, NULL, 'e', -6, 21, 6, 0); |
| |
| if(!conv.ToShortest(val, &builder)) { |
| return 0; |
| } |
| |
| *len = (size_t) builder.position(); |
| builder.Finalize(); |
| |
| return 1; |
| } |
| |
| END_C |