### 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
CHECK(String::num(10000.000005678999999999) == "10000.000005679"); 
	CHECK(String::num(42.12999999, 6) == "42.13"); 
	
	
	CHECK(String::num(0.00000123456789987654321123456789987654321, 32).length() == 34);
	CHECK(String::num(0.00000123456789987654321123456789987654321, 42).length() == 34); 
	CHECK(String::num(10000.00000123456789987654321123456789987654321, 42).length() == 38); 
}
TEST_CASE("[String] String to integer") {
	static const char *nums[4] = { "1237461283", "- 22", "0", " - 1123412" };
	static const int num[4] = { 1237461283, -22, 0, -1123412 };
	for (int i = 0; i < 4; i++) {
		CHECK(String(nums[i]).to_int() == num[i]);
	}
}
TEST_CASE("[String] Hex to integer") {
	static const char *nums[4] = { "0xFFAE", "22", "0", "AADDAD" };
	static const int64_t num[4] = { 0xFFAE, 0x22, 0, 0xAADDAD };
	for (int i = 0; i < 4; i++) {
		CHECK(String(nums[i]).hex_to_int() == num[i]);
	}
}
TEST_CASE("[String] String to float") {
	static const char *nums[4] = { "-12348298412.2", "0.05", "2.0002", " -0.0001" };
	static const double num[4] = { -12348298412.2, 0.05, 2.0002, -0.0001 };
	for (int i = 0; i < 4; i++) {
		CHECK(!(ABS(String(nums[i]).to_float() - num[i]) > 0.00001));
	}
}
TEST_CASE("[String] Slicing") {