Как проверить, является ли ввод числом или строкой, используя isNan() в groovy

Привет, я новичок в groovy, я запутался, как проверить, является ли данный ввод числом или нет, я пробовал следующее

def a= ' 12.571245ERROR'
if(a.isNan()==0)
{
println("not a number")
}
else
{
println("number")
}

Пожалуйста, помогите мне, как использовать isNan в groovy. Я много гуглил, но не нашел никакого результата. заранее спасибо


person shashank    schedule 10.08.2013    source источник


Ответы (4)


Вы можете попытаться привести его к числу и поймать исключение, если это не число

def a= ' 12.571245ERROR'

try {
    a as Double
    println "a is number"
}catch (e) {
    println "a is not a number"
}

Or

if(a instanceof Number)
    println "Number"
else
    println "NaN"

Хотя имейте в виду, что при втором способе проверки это не удастся, даже если a является допустимым числом, но в String, например «123». 123 — это число, а «123» — нет.

person kdabir    schedule 10.08.2013
comment
Я не в восторге от того, что это лучший ответ, если поведение программы заключается в обработке данных, независимо от того, являются ли они числовым типом или нет, тогда следует не использовать исключение. исключения, как следует из их названия, обнаруживают неожиданное/нежелательное поведение. - person Jay Edwards; 14.03.2019

String::isNumber() Groovy спешит на помощь:

def a = "a"

assert !a.isNumber()

def b = "10.90"

assert b.isNumber()
assert b.toDouble() == 10.90
person Will    schedule 10.08.2013

Чтобы ответить на ваш вопрос, я бы не стал рассматривать isNan(). Он упоминается в Интернете, но его нет в документе String для GDK.

Учти это:

def input = "12.37"
def isNumber = input.isDouble() 

println "isNumber : ${isNumber}"

Или используйте что-то более похожее на Java:

def input = "12.37error"

def isNumber = false

try {
    double value = Double.parseDouble(input)
    isNumber = true
} catch (Exception ex) {
}

println "isNumber : ${isNumber}"
person Michael Easter    schedule 10.08.2013

Это не удастся для числового формата с запятыми (например: 10 00 000)

def aNumber = "10,00,000" aNumber.isNumber() и aNumber.isDouble() дают ответ как ложный.

person Latha    schedule 15.10.2018