Parcourir la source

Merge pull request #7756 from volzhs/str-format

Fix zero padding formatting
Rémi Verschelde il y a 8 ans
Parent
commit
6abe141579
1 fichiers modifiés avec 9 ajouts et 6 suppressions
  1. 9 6
      core/ustring.cpp

+ 9 - 6
core/ustring.cpp

@@ -3945,12 +3945,8 @@ String String::sprintf(const Array& values, bool* error) const {
 						case 'X': base = 16; capitalize = true; break;
 						case 'X': base = 16; capitalize = true; break;
 					}
 					}
 					// Get basic number.
 					// Get basic number.
-					String str = String::num_int64(value, base, capitalize);
-
-					// Sign.
-					if (show_sign && value >= 0) {
-						str = str.insert(0, "+");
-					}
+					String str = String::num_int64(ABS(value), base, capitalize);
+					int number_len = str.length();
 
 
 					// Padding.
 					// Padding.
 					String pad_char = pad_with_zeroes ? String("0") : String(" ");
 					String pad_char = pad_with_zeroes ? String("0") : String(" ");
@@ -3960,6 +3956,13 @@ String String::sprintf(const Array& values, bool* error) const {
 						str = str.lpad(min_chars, pad_char);
 						str = str.lpad(min_chars, pad_char);
 					}
 					}
 
 
+					// Sign.
+					if (show_sign && value >= 0) {
+						str = str.insert(pad_with_zeroes?0:str.length()-number_len, "+");
+					} else if (value < 0) {
+						str = str.insert(pad_with_zeroes?0:str.length()-number_len, "-");
+					}
+
 					formatted += str;
 					formatted += str;
 					++value_index;
 					++value_index;
 					in_format = false;
 					in_format = false;