は、値が解析され、java.io.StreamTokenizerによって返されたかどうかを調べる手段です。 nval(例:200
)は整数か浮動小数点数ですか。java.io.StreamTokenizer.TT_NUMBER:浮動小数点型または整数型?
おかげ
編集:
私は入力が '200' または '200.0' だったかどうかを知ることができるようにしたいです。
は、値が解析され、java.io.StreamTokenizerによって返されたかどうかを調べる手段です。 nval(例:200
)は整数か浮動小数点数ですか。java.io.StreamTokenizer.TT_NUMBER:浮動小数点型または整数型?
おかげ
編集:
私は入力が '200' または '200.0' だったかどうかを知ることができるようにしたいです。
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のためhere
私は剰余演算子を使用します。
if (yourNval % 1 > 0)
{
// nval is floating point.
}
else
{
// nval is an integer.
}
これは、Javaでの弾性率がworks with floating point numbersだけでなく、整数ために動作します。
UPDATE:あなたはゼロ値の小数部分とダブルスの整数を区別する必要があると指定しているので、私はあなたが以下のような何かを持っていると思う:
Double(yourNval).toString().indexOf('.');
ので、より完全な機能の意志あなたは、本質的にdouble
がint
であるかどうかを把握しようとしているとして、あなたはBigDecimal
を作成し、そのscale()
メソッドをテストすることができます
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;
}
}
:ように見えます。また、Math
静的メソッドfloor()
を使用して、元の値との戻り値をテストすることもできます。両者の
if(Math.floor(myStreamTokenizer.nval) == myStreamTokenizer.navl)) {
//treat it as an int
} else {
//treat it as a double
}
それがより効率的であるように、私は、Math.floor
オプションを使用します。
おかげですが、入力は「200.0」や「200」だった場合、これは私に教えてくれありません。 – Pierre
私は上記のコードを追加して、整数 'nval'入力に含まれる末尾のゼロの数を決定しました。あなたの例である '200.0'は' numTrailingZeroes'の値が '1'になります。 –
もう一度、あなたのソリューションはfloat値を使用しますが、StreamTokenizerが解析した元のトークンについては教えてくれません。 – Pierre