### Godot version

4.1.1

### System information

linux

### Issue description

The `"%+f"` format adds a `+` sign in front of positive numbers. If you try to format `-0.0`, it breaks and displays both a `+` and a `-`.

### Steps to reproduce

```gdscript
@tool
extends EditorScript

func _run() -> void:
    print("%+f" % -0.0)
```

### Minimal reproduction project

see above
parts.push_back("One");
	parts.push_back("B");
	parts.push_back("C");
	String t = s.join(parts);
	CHECK(t == "One, B, C");
}
TEST_CASE("[String] Is_*") {
	static const char *data[12] = { "-30", "100", "10.1", "10,1", "1e2", "1e-2", "1e2e3", "0xAB", "AB", "Test1", "1Test", "Test*1" };
	static bool isnum[12] = { true, true, true, false, false, false, false, false, false, false, false, false };
	static bool isint[12] = { true, true, false, false, false, false, false, false, false, false, false, false };
	static bool ishex[12] = { true, true, false, false, true, false, true, false, true, false, false, false };
	static bool ishex_p[12] = { false, false, false, false, false, false, false, true, false, false, false, false };
	static bool isflt[12] = { true, true, true, false, true, true, false, false, false, false, false, false };
	static bool isid[12] = { false, false, false, false, false, false, false, false, true, true, false, false };
	for (int i = 0; i < 12; i++) {
		String s = String(data[i]);
		CHECK(s.is_numeric() == isnum[i]);
		CHECK(s.is_valid_int() == isint[i]);
		CHECK(s.is_valid_hex_number(false) == ishex[i]);
		CHECK(s.is_valid_hex_number(true) == ishex_p[i]);
		CHECK(s.is_valid_float() == isflt[i]);
		CHECK(s.is_valid_identifier() == isid[i]);
	}
}
TEST_CASE("[String] humanize_size") {
	CHECK(String::humanize_size(1000) == "1000 B");
	CHECK(String::humanize_size(1025) == "1.00 KiB");
	CHECK(String::humanize_size(1025300) == "1001.2 KiB");
	CHECK(String::humanize_size(100523550) == "95.86 MiB");
	CHECK(String::humanize_size(5345555000) == "4.97 GiB");