Wie man herausfindet, dass eine Zahl float
o integer
?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
Wie man herausfindet, dass eine Zahl float
o integer
?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
Nachdem ich einige der Antworten hier ausprobiert habe, habe ich diese Lösung geschrieben. Dies funktioniert auch mit Zahlen innerhalb einer Zeichenkette.
function isInt(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return !(number - parseInt(number));
}
function isFloat(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return number - parseInt(number) ? true : false;
}
var tests = {
'integer' : 1,
'float' : 1.1,
'integerInString' : '5',
'floatInString' : '5.5',
'negativeInt' : -345,
'negativeFloat' : -34.98,
'negativeIntString' : '-45',
'negativeFloatString' : '-23.09',
'notValidFalse' : false,
'notValidTrue' : true,
'notValidString' : '45lorem',
'notValidStringFloat' : '4.5lorem',
'notValidNan' : NaN,
'notValidObj' : {},
'notValidArr' : [1,2],
};
function isInt(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return !(number - parseInt(number));
}
function isFloat(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return number - parseInt(number) ? true : false;
}
function testFunctions(obj) {
var keys = Object.keys(obj);
var values = Object.values(obj);
values.forEach(function(element, index){
console.log(`Is ${keys[index]} (${element}) var an integer? ${isInt(element)}`);
console.log(`Is ${keys[index]} (${element}) var a float? ${isFloat(element)}`);
});
}
testFunctions(tests);
Es hängt wirklich davon ab, was Sie erreichen wollen. Wenn Sie stark typisierte Sprachen "emulieren" wollen, dann schlage ich vor, dass Sie es nicht versuchen. Wie bereits erwähnt, haben alle Zahlen die gleiche Darstellung (den gleichen Typ).
Mit etwas wie Claudiu zur Verfügung gestellt:
isInteger( 1.0 )
-> wahr
was für den gesunden Menschenverstand gut aussieht, aber in etwas wie C würde man false
Es muss wirklich nicht so kompliziert sein. Der numerische Wert der parseFloat()- und parseInt()-Äquivalente einer Ganzzahl ist derselbe. Sie können also wie folgt vorgehen:
function isInt(value){
return (parseFloat(value) == parseInt(value)) && !isNaN(value);
}
Dann
if (isInt(x)) // do work
Dies ermöglicht auch die Überprüfung von Zeichenketten und ist daher nicht streng. Wenn Sie einen starken Typ Lösung (aka, wird nicht mit Zeichenfolgen arbeiten):
function is_int(value){ return !isNaN(parseInt(value * 1) }
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
55 Stimmen
Ich verstehe, worauf Sie hinauswollen, aber nur um das klarzustellen:
<nit-pick>
In JavaScript gibt es keine unterschiedlichen numerischen Typen Integer und Float. Jede Zahl in JavaScript ist einfach eineNumber
.</nit-pick>
5 Stimmen
Ist
Infinity
eine ganze Zahl oder ein nicht ganzzahliger Wert? Die Antworten sind in dieser Hinsicht ziemlich gleichmäßig verteilt.14 Stimmen
@MikeSamuel Um mathematisch genau zu sein: Da Unendlich keine reelle Zahl ist und alle ganzen Zahlen reelle Zahlen sind,
Infinity
kann nicht als ganze Zahl betrachtet werden.0 Stimmen
@rvighne, Die Frage bezieht sich auf "float", nicht auf "real". Wie auch immer, Reale sind irrelevant, weil Computer nur Folgendes darstellen können berechenbare Zahlen .
0 Stimmen
@MikeSamuel Sorry, ich meinte ganze Zahlen und schwimmt sind reelle Zahlen. Und außerdem habe ich gesagt, dass Ints und Floats Teil von reelle Zahlen, nicht, dass sie alle reellen Zahlen darstellen können. Im Grunde will ich damit sagen, dass Infinity keine Zahl ist und es egal sein sollte, ob es sich um einen Float oder Int handelt.
2 Stimmen
@rvighne, ich denke, wir sind uns einig, dass die Fac
0 Stimmen
@"" e
0 Stimmen
C m )
0 Stimmen
A e
1 Stimmen
Y
isInteger
. ici .6 Stimmen
Halten Sie
1.0
Integer oder Float?