我有这个问题:
编写一个接收十进制数的函数 greaterpart 。该数字应大于零。 该函数需要识别十进制数的较大部分,无论是整数还是 小部分,然后警告更大的部分。 例如:
greaterpart(32.45)
提醒 45
和
greaterpart(301.71)
提醒 301 。
这是我的解决方案:
function graterpart(x){
if(x<0){
alert("Number can not be null");
}
else{
var x;
var y;
y= parseFloat(x);
var remainder = (y-Math.floor(y))*10000;
if(y>remainder){
alert(y);
} else{
alert(remainder);
}
}
}
graterpart(32.45);
但它没有按预期工作。
我在这做错了什么?提前谢谢。
答案 0 :(得分:3)
简单地将其转换为字符串拆分。得到两个元素数组parseInt,并比较最简单的
var s = 56.69;
//console.log(s.toString())
var d = s.toString().split(".");
var greater = (parseInt(d[0],10) > parseInt(d[1],10)) ? d[0] : d[1];
alert(greater);
&#13;
答案 1 :(得分:2)
试试这个:
<script>
function greaterpart(x){
alert(Math.max.apply(this, x.toString().split('.')));
}
greaterpart(32.45);
</script>
Math.max()会将String.prototype.split()返回的字符串隐式转换为数字。
如果你不理解这个功能,可以用不同的步骤重新制定它:
将数字转换为字符串:
x = x.toString();
将其拆分为小数点:
var parts = x.split('.'); // Is now ["32", "45"]
获取最大值:
var greater = Math.max(parts[0], parts[1]);
但是有一个更短的方式。记住这一点:
var result1 = fun(arg1, arg2, arg3);
var result2 = fun.apply(thisValue, [arg1, arg2, arg3]);
第二行看起来有些复杂,但与第一行完全相同。您现在可以使用它来简化对Math.max()的调用:
var greater = Math.max.apply(this, parts);
现在用console.log()或alert()输出它。
答案 2 :(得分:0)
可以这样简单地完成:
var number = 312.25;
var numberStr = number.toString();
var twoParts = numberStr.split(".");
if ((parseInt(twoParts[0])) > (parseInt(twoParts[1]))){
alert (twoParts[0]);
}else {
alert(twoParts[1]);
}
答案 3 :(得分:0)
我认为最好的方法是将小数转换为字符串,然后将其拆分为“。”,将两个部分转换为整数并提醒大部分。
function graterpart(x){
if(x < 0){
alert("Number can not be null");
}else{
var str = x.toString();
if(str.indexOf(".") != -1){
var parts = str.split(".");
var first_part = parseInt(parts[0]);
var second_part = parseInt(parts[1]);
alert(Math.max(first_part, second_part));
}else{
alert(x);
}
}
}
graterpart(321.45);