             }
         case let .StringMinLengthError(name, value, minLength):
             if let n = name {
-                return "Key \(n) had value \(value), shorter than minimum length \(minLength)"
-            } else {
-                return "Value \(value) is shorter than minimum length \(minLength)"
+                return "Key \(n) had value \(value), shorter than minimum length \(vp.integerFormatter.stringFromNumber(minLength)!)"
+            } else {
+                return "Value \(value) is shorter than minimum length \(vp.integerFormatter.stringFromNumber(minLength)!)"
             }
         case let .StringMaxLengthError(name, value, maxLength):
             if let n = name {
-                return "Key \(n) had value \(value), longer than minimum length \(maxLength)"
-            } else {
-                return "Value \(value) is longer than minimum length \(maxLength)"
+                return "Key \(n) had value \(value), longer than minimum length \(vp.integerFormatter.stringFromNumber(maxLength)!)"
+            } else {
+                return "Value \(value) is longer than minimum length \(vp.integerFormatter.stringFromNumber(maxLength)!)"
             }
         case let .RegexpError(name, value, regexp):
             if let n = name {

 DictParser extracts values from a [String: String] dictionary.
 */
public class DictParser {
    private let vp: ValueParser
    private let dict: [String: String]

    public init(dict: [String: String], valueParser: ValueParser = ValueParser()) {
        self.dict = dict

            }
        case let .IntRangeError(name, value, range):
            if let n = name {
                return "Key \(n) had value \(vp.integerFormatter.stringFromNumber(value)!), not in range \(range)"
            } else {
                return "Value \(vp.integerFormatter.stringFromNumber(value)!) not in range \(range)"
            }
        case let .ValueTooLargeError(name, value, limit):
            if let n = name {
