2016-11-24 87 views
0

我有一个函数明星,将采取参数作为整数或小数假设如何打印在小数

function printStars(n) 

其中n可以是1,1.25,1.5,1,75等高达5

我对星星有不同的等级。

<i class="icon icon-star-0 margin-right-5 size-icon-15"></i> (empty) 
<i class="icon icon-star-25 margin-right-5 size-icon-15"></i> (25% filled) 
<i class="icon icon-star-50 margin-right-5 size-icon-15"></i> (50% filled) 
<i class="icon icon-star-75 margin-right-5 size-icon-15"></i> (75% filled) 
<i class="icon icon-star-100 margin-right-5 size-icon-15"></i> (100% filled) 

我想去的地方,如果我输入数字像printStars(3.75)代码,我会给我的字符串

<i class="icon icon-star-100 margin-right-5 size-icon-15"></i> 
<i class="icon icon-star-100 margin-right-5 size-icon-15"></i> 
<i class="icon icon-star-100 margin-right-5 size-icon-15"></i> 
<i class="icon icon-star-75 margin-right-5 size-icon-15"></i> 

我所做的代码,但它不处理小数。任何人都可以引导我?这是我现在的代码。

function printStars(n){ 
    var str=n.toString(); 
    var splited=str.split('.'); 
    var a=new Array(); 
    var html = ''; 
    a=splited; 
    if (a[1]==undefined){ 
     a[1] = '0'; 
    } 
    if (a[0]>0){ 
     var filled = Number(a[0]) + Number(1); 
    } else { 
     var filled = Number(a[0]); 
    } 

    var left = Number(5) - Number(filled); 

    if (a[0]>0){ 
     for (var i = 1; i <= filled-1; i++){ 
      if (i==1){ 
       html += '<i class="icon icon-star-100 margin-left-5"></i>'; 
      } else { 
       html += '<i class="icon icon-star-100"></i>'; 
      } 

     } 
     html += '<i class="icon icon-star-'+a[1]+'"></i>'; 
     for (var i = 1; i <= left; i++){ 
      html += '<i class="icon icon-star-0"></i>'; 
     } 
    } else { 
     for (var i = 1; i <= filled; i++){ 
      if (i==1){ 
       html += '<i class="icon icon-star-100 margin-left-5"></i>'; 
      } else { 
       html += '<i class="icon icon-star-100"></i>'; 
      } 
     } 
     for (var i = 1; i <= left; i++){ 
      html += '<i class="icon icon-star-0"></i>'; 
     } 
    } 

    return html; 

    console.log('filled:'+filled); 
    console.log('left:'+left); 

} 

不过是数字低于1

+2

向我们显示您的代码。 – Turnip

+0

@Turnip显示 –

+0

和'setItem()'? – Turnip

回答

3
function printStars(n){ 
    setItem('rating',n); 

    var wholestars = Math.floor(n); //Round down to nearest whole 
    var extrastar = (Math.round((n-wholestars) * 4)/4).toFixed(2); //Round to nearest 0.25 (- wholestars) 
    var emptystars = 5-Math.ceil(n); //Get empty stars 

    var html = ''; 
    count = 1; 

    // Whole Stars 
    for (var i = 1; i <= wholestars; i++){ 
     html += '<i class="icon icon-star-100" onclick="fillstars('+count+')"></i>'; 
     count++; 
    } 
    // Extra Star 
    if(extrastar!=0) { 
     html += '<i class="icon icon-star-'+((extrastar*100).toString())+'" onclick="fillstars('+count+')"><i>'; 
     count++; 
    } 
    // Empty Stars 
    for (var i = 1; i <= emptystars; i++){ 
     html += '<i class="icon icon-star-0" onclick="fillstars('+count+')"></i>'; 
     count++; 
    } 


    return html; 
} 
+0

这是最好的答案。谢谢。 –

+0

好的一个。 ..。 –

+0

@AliZia没问题。 –

0

function printStars(){ 
 
      
 
      var starRate = document.getElementById("StarNumber").value; 
 
      
 
      var html = ''; 
 
      
 
       for(var i = 1; i <= starRate ; i++) { 
 
        html+="<i class='fa fa-star'> </i>"; 
 
       } 
 
       if (starRate.indexOf('.') > -1){ 
 
        html+="<i class='fa fa-star-half'> </i>"; 
 
        i++; 
 
       } 
 
       while(i <= 5) { 
 
        html+="<i class='fa fa-star-o'></i>"; 
 
        i++; 
 
       } 
 
      console.log(html); 
 
      document.getElementById("StarContent").innerHTML = html; 
 
     }
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> 
 

 
<div id="StarContent"></div> 
 

 
     <input type="text" id="StarNumber" name="StarNumber"> 
 
     <button type="button" onclick="printStars();"> PrintStars </button>

+0

我想在javascript bro的这段代码。 –

+0

好吧,给我几个薄荷糖 –

+0

我又该如何处理2.25? –

1

,你可以在你的2小数分离不起作用,例如4.5

var x = 4.5 
var str=x.toString(); 
var splited=str.split('.'); 
var a=new Array(); 
a=splited; 

使用第一个数字(4)a[0]使用第二个数字(5)a[1]

1

你可以得到两个部分很容易像这样:

var n= 3.75; 
 
    var hundreds = Math.floor(n)/1; 
 
    var left = n - Math.floor(n); 
 
    left = left.toString().replace(/0\./, ''); 
 
    console.log(hundreds + ',' + left);

这会给你的“100”块的整数倍,其余的将是十进制值。

然后只需追加元素。