java.io.StreamTokenizer.TT_编号:浮点还是整数?
有没有办法找到由.nval(例如java.io.StreamTokenizer.TT_编号:浮点还是整数?,java,parsing,Java,Parsing,有没有办法找到由.nval(例如200)解析并返回的值是整数还是浮点数 谢谢 已编辑: 我想知道输入是“200”还是“200.0”。我会使用模数运算符: if (yourNval % 1 > 0) { // nval is floating point. } else { // nval is an integer. } 这是因为Java中的模数和整数一样有效 更新:由于您指定需要区分整数和小数部分为零值的双精度整数,因此我认为您必须执行以下操作: Double(your
200
)解析并返回的值是整数还是浮点数
谢谢
已编辑:
我想知道输入是“200”还是“200.0”。我会使用模数运算符:
if (yourNval % 1 > 0)
{
// nval is floating point.
}
else
{
// nval is an integer.
}
这是因为Java中的模数和整数一样有效
更新:由于您指定需要区分整数和小数部分为零值的双精度整数,因此我认为您必须执行以下操作:
Double(yourNval).toString().indexOf('.');
因此,更完整的函数如下所示:
if (yourNval % 1 > 0)
{
// nval is floating point.
}
else
{
// nval is an integer.
// Find number of trailing zeroes.
String doubleStr = Double(yourNval).toString();
int decimalLoc = doubleStr.indexOf('.');
int numTrailingZeroes = 0;
if (decimalLoc > 0)
{
numTrailingZeroes = doubleStr.length() - decimalLoc - 1;
}
}
基本上,当您试图确定一个
double
是否为int
时,您可以创建一个BigDecimal
并测试其方法。您还可以使用Math
静态方法,并根据原始值测试返回值
if(Math.floor(myStreamTokenizer.nval) == myStreamTokenizer.navl)) {
//treat it as an int
} else {
//treat it as a double
}
在这两个选项中,我会使用
Math.floor
选项,因为它会更有效。我认为使用StringTokenizer是不可能的,它太旧了。您可以使用扫描仪执行以下操作:
Scanner fi = new Scanner("string 200 200.0");
fi.useLocale(Locale.US);
while (fi.hasNext()) {
if (fi.hasNextInt()) {
System.out.println("Integer: " + fi.nextInt());
} else if (fi.hasNextDouble()) {
System.out.println("Double: " + fi.nextDouble());
} else {
System.out.println("String: " + fi.next());
}
}
类的文档是谢谢你的anwser,但这并没有告诉我输入是“200.0”还是“200”。我在上面添加了代码来确定整数
nval
输入包含的尾随零的数量。您的示例,200.0
,将产生numTrailingZeroes
值1
。再次感谢您,您的解决方案使用了浮点值,但没有告诉我StreamTokenizer解析的原始令牌。如果您知道整数值和尾随零的数量,您就确切知道令牌是什么。我想akf和我当时真的不明白你的问题,因为你不得不重新措辞两次。谢谢你的回答,但这并没有告诉我输入是“200.0”还是“200”。因为字段是双精度的,200
将始终是200.0
。