You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 line
777 B

  1. #include "double-conversion/double-conversion.h"
  2. #define BEGIN_C extern "C" {
  3. #define END_C }
  4. namespace dc = double_conversion;
  5. BEGIN_C
  6. int
  7. double_to_shortest(char* buf, size_t size, size_t* len, double val)
  8. {
  9. int flags = dc::DoubleToStringConverter::UNIQUE_ZERO |
  10. dc::DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
  11. dc::DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
  12. dc::DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
  13. dc::StringBuilder builder(buf, size);
  14. dc::DoubleToStringConverter conv(flags, NULL, NULL, 'e', -6, 21, 6, 0);
  15. if(!conv.ToShortest(val, &builder)) {
  16. return 0;
  17. }
  18. *len = (size_t) builder.position();
  19. builder.Finalize();
  20. return 1;
  21. }
  22. END_C