2016-04-28 31 views
-1

很確定這是一個簡單的問題,但是我有一些問題纏繞在它的周圍。假設我有一個十進制數:將十進制數轉換爲八分之一的小數部分

1.25 
1.5 
2.75 
2.45 

如何將小數部分轉換爲小數部分顯示?例如

1 2/8 
1 4/8 
2 6/8 
2 3/8 // I need to round down rather than up when its not a simple conversion. 

非常感謝!

+1

您可以發佈您當前的轉換代碼? – 2016-04-28 11:43:55

+0

你期望在這裏**'2.45' **? –

回答

1

這是一個簡單的函數,用於在香草Javascript中僅使用Math(不分割)來計算分數。

document.addEventListener("DOMContentLoaded", function(event) { 
 
    document.getElementById("number").addEventListener("change", function(event) { 
 
    var f = parseFloat(document.getElementById("number").value); // float 
 
    var a = Math.abs(f); // absolute value 
 
    var w = Math.floor(a); // whole number 
 
    var r = a - w; // remainder 
 
    var d = Math.floor(r/.125); // denominator 
 

 
    document.getElementById("results").innerHTML = f + " as a fraction: " + (f < 0 ? '-' : '') + w + ' ' + (d > 0 ? d + '/8' : '') + '<br>' + document.getElementById("results").innerHTML; 
 
})});
Enter a number to convert to fractions of 1/8s.<br> 
 
<input type="text" id="number" name="number" /> 
 
<div id="results"></div>

+0

謝謝大家。很多有趣的方法來解決這個問題,但是我接受這個答案,因爲它似乎是最簡單的/需要最少量的代碼:) – John1984

+1

它不支持負號碼,但如果你不照顧那就好了。輸入'-59.12'將產生'-60 7/8'。 – timolawl

+0

@timolawl感謝您指出,腳本固定處理負數。 – Paul

1

提取小數部分(通過採用浮點1-模數或通過減去被截斷爲整數的數字來做到這一點,對於負數要格外小心),然後乘以8.然後變成分子的分子分母是8的分數。

例如,1.25變換爲1和0.25 * 8「八」以上,即「1和2/8」。

0

由於100/8 = 12.5(那就是1/8),你需要做一些計算,以檢查你的分數部分是多少(可能是錯誤的,在深度未測試):

$(document).ready(function() { 
 
    $('#num').change(function() { 
 
    var number = $(this).val(); 
 
    var parts = number.split('.'); 
 

 
    if (typeof parts[1] == 'undefined') { 
 
     parts[1] = 0; 
 
    } 
 

 
    var fraction = parseInt((parts[1] + '00').substring(0, 2)); 
 

 
    if (fraction != 0) { 
 
     fraction = Math.floor(fraction/12.5); // 100/8 
 

 
     $('span').text(parts[0] + ' ' + fraction + '/8'); 
 
    } else { 
 
     $('span').text(parts[0]); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="num" /><span></span>

0

考慮到負數,0/8 FR操作和零:

var arr = [1.25, 1.5, 2.75, 2.45, 130.4576, 0.00, -0, 0, -1.5, -42, -59.12, -59.98, -60.01]; 
 
var decimal; 
 
var numerator; 
 
var output; 
 

 
arr.forEach(function(number) { 
 
    integer = number.toString().match(/^(-?\d*)\.?/).slice(1); 
 
    decimal = number.toString().match(/\.\d*$/); 
 
    numerator = Math.floor(decimal * 8); 
 
    output = numerator ? integer + ' ' + numerator + '/8' : integer; 
 
    document.body.insertAdjacentHTML('beforeend', output + '<br>'); 
 
});

相關問題