Convert floats to string better in CPDF_Number::WriteTo()

The existing implementation of CPDF_Number::WriteTo() for floats results
in strings that cannot be represented as a float (due to precision
error) and has certain restrictions (constrained within integer min/max
bounds, only a certain number of significant digits). These restrictions
are unnecessary for writing to PDFs and are not part of the PDF
specification. They are also causing slight miscalculations in PDFs.
Change to use WriteFloat() instead, which will write the float value to
string as-is with all necessary digits.

To use WriteFloat() in core/fpdfapi/parser, split it into its own build
target to avoid circular dependencies.

Some tests have floats in PDFs that change slightly with the new string
representation, so modify their checksums or values. The overall PDF
should not have any noticeable change.

Bug: 352496170
Change-Id: I93539341dc2eee9739db02dd8923d5ed857b8601
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/124272
Commit-Queue: Andy Phan <andyphan@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index abf055f..1d1acce 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -70,6 +70,7 @@
     "../constants",
     "../core/fdrm",
     "../core/fpdfapi/edit",
+    "../core/fpdfapi/edit:contentstream_write_utils",
     "../core/fpdfapi/font",
     "../core/fpdfapi/page",
     "../core/fpdfapi/parser",