INT ( somenumber ) будет иметь значение только в терминах отображения, то есть отображать в цифрах в цифрах [ somenumber »и не ограничиваться только 11. Вы соединяете его с помощью ZEROFILL
, который добавит нули до тех пор, пока он не будет соответствовать вашей длине
. Обратите внимание, что значение, хранящееся в базе данных, не изменяется, любые вычисления будут по-прежнему вести себя так, как есть.
Замечания:
ZEROFILL
будет содержать нули. INT (5) ZEROFILL с сохраненным значением 32 покажет 00032 INT (5) с сохраненным значением 32 покажет 32 INT с сохраненным значением 32 покажет 32 . Аналогичный применяется также к BIGINT, MEDIUMINT, SMALLINT и TINYINT.
Проанализируйте его (т.е. с помощью Integer # parseInt
) и просто перехватите исключение. =)
Чтобы уточнить: функция parseInt проверяет, может ли она анализировать число в любом случае (очевидно), и если вы все равно хотите проанализировать его, вы не собираетесь снижать производительность, фактически выполняя синтаксический анализ.
Если вы не хотите анализировать его (или анализировать очень, очень редко), вы можете, конечно, сделать это по-другому.
Вот почему мне нравится подход Try * в .NET. В дополнение к традиционному методу Parse, подобному методу Java, у вас также есть метод TryParse. Я плохо разбираюсь в синтаксисе Java (параметры вывода?), Поэтому, пожалуйста, рассматривайте следующее как своего рода псевдокод. Тем не менее, это должно прояснить концепцию.
boolean parseInteger(String s, out int number)
{
try {
number = Integer.parseInt(myString);
return true;
} catch(NumberFormatException e) {
return false;
}
}
Использование:
int num;
if (parseInteger("23", out num)) {
// Do something with num.
}
Вы можете использовать NumberFormat # parse
:
try
{
NumberFormat.getInstance().parse(value);
}
catch(ParseException e)
{
// Not a number.
}
Обычно это делается с помощью простой пользовательской функции (например, Roll-your-own "isNumeric").
Что-то вроде:
public static boolean isNumeric(String str) {
try {
Double.parseDouble(str);
return true;
} catch(NumberFormatException e){
return false;
}
}
Однако, если вы звоните эта функция много, и вы ожидаете, что многие проверки не будут выполнены из-за того, что это не число, тогда производительность этого механизма будет невысокой, так как вы полагаетесь на исключения, создаваемые для каждого сбоя, что является довольно дорогой операцией.
Альтернативный подход может заключаться в использовании регулярного выражения для проверки действительности числа:
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
Однако будьте осторожны с указанным выше механизмом RegEx, поскольку он не сработает, если вы используете неарабские цифры (т. Е. цифры, отличные от 0 до 9). Это связано с тем, что часть "\ d" регулярного выражения будет соответствовать только [0-9] и фактически не имеет международной числовой информации. (Спасибо OregonGhost за указание на это!)
Или даже другой альтернативой является использование встроенного в Java объекта java.text.NumberFormat, чтобы увидеть, находится ли после анализа строки позиция анализатора в конце строки. Если это так, мы можем предположить, что вся строка является числовой:
public static boolean isNumeric(String str) {
NumberFormat formatter = NumberFormat.getInstance();
ParsePosition pos = new ParsePosition(0);
formatter.parse(str, pos);
return str.length() == pos.getIndex();
}
Я думаю, единственный способ надежно определить, является ли строка числом. , заключается в его анализе. Поэтому я бы просто проанализировал его, и если это число, вы получите число в int бесплатно!