2016-04-06 10 views
0

私は自分の必要性の電卓を作っていますが、結果はすべて丸められます。JavaScript計算機は常に床に丸めます

正確な結果を表示するにはどうすればよいですか?

function toFixed(value, precision) { 
var precision = precision || 0, 
    neg = value < 0, 
    power = Math.pow(10, precision), 
    value = Math.round(value * power), 
    integral = String((neg ? Math.ceil : Math.floor)(value/power)), 
    fraction = String((neg ? -value : value) % power), 
    padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0'); 
    return precision ? integral + '.' + 
    padding + fraction : integral; } function dosage() { 

    var a = parseInt(jQuery("#a").val()) ; 
    var b = parseInt(jQuery("#b").val()) ; 
    var c = parseInt(jQuery("#c").val()) ; 
    var r = Math.round(a*((a*(b/100)*2)+(c*25.4))*(0.0152/100)); 
r = toFixed(r,1); 
+0

をテストするための完全なコードはありますか? –

答えて

1

さて、あなたはコードを書いた場合、その後、あなたが追加しました:あなたがMath.floorをしたくない場合は

integral = String((neg ? Math.ceil : Math.floor)(value/power)) 

そう、あなたはそれを取り出す必要がありますか? または、時にはMath.floorが必要な場合は、negの値を調べる必要があります。これが戻り値を常に切り捨てる原因になります。

ライン、あなたはそれが第二部として間違っているようだ持っているように:

(value/power) 

は自分の三元演算の結果の隣にある式です。その部分がどのように何に影響を与えているのか分かりません。

+0

OPは「すべての結果を丸めるために丸めている」と言っています。 - 強調しているのは** **ここにあると思います... – webeno

+0

しかし、OPは「どうして私は正確な結果を出すことができますか」と言っています。 –

+0

こんにちはスコット、もう一度私たちは昨日おしゃべりしました、覚えていますか? ;)あなたの編集が好きです。 – webeno

0

ここでは、テストのための値を与えることができます

<script type="text/javascript"> 
 

 
jQuery(document).ready(function() 
 
{ 
 
function dosage_e(e) 
 
{ 
 
e.preventDefault(); 
 
dosage(); 
 
} 
 

 
function toFixed(value, precision) { 
 
var precision = precision || 0, 
 
    neg = value < 0, 
 
    power = Math.pow(10, precision), 
 
    value = Math.round(value * power), 
 
    integral = String((neg ? Math.ceil : Math.floor)(value/power)), 
 
    fraction = String((neg ? -value : value) % power), 
 
    padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0'); 
 
    return precision ? integral + '.' + padding + fraction : integral; } 
 

 
function dosage() {  
 
     var a = parseInt(jQuery("#a").val()) ; 
 
     var b = parseInt(jQuery("#b").val()) ; 
 
     var c = parseInt(jQuery("#c").val()) ; 
 
     var r = Math.round(a*((a*(b/100)*2)+(c*25.4))*(0.0152/100)); 
 
    r = toFixed(r,1); 
 

 
jQuery("#result").val(r);} 
 

 

 
jQuery("#a").keyup(
 
    function (e) { dosage(e); }); 
 

 
jQuery("#b").keyup(
 
    function (e) { dosage(e); }); 
 

 
jQuery("#c").keyup(
 
    function (e) { dosage(e); }); 
 

 
    dosage(); }); // ]]&gt; 
 

 
</script> 
 

 

 
<div id="fond-voiture" align="center"> 
 

 
    <div><h1 style="color:white; font-family:Arial;">VALUE 1</h1><input id="a" type="text" name="a" value="385" /> 
 
    </div> 
 
</br> 
 
    <div><h1 style="color:white; font-family:Arial;">VALUE 2</h1><input id="b" type="text" name="b" value="65" />  
 
    </div> 
 
</br> 
 
    <div><h1 style="color:white; font-family:Arial;">VALUE 3</h1><input id="c" type="text" name="c" value="22.5"/> 
 
    </div> 
 
</br> 
 
    <div><h1 style="color:white; font-family:Arial;">VALUE 4</h1><input id="result" readonly="readonly"/> 
 
    </div> 
 

 
</div> 
 

 
</div>

+0

これは結果62,7を与えなければならないが、62.0を示す – Lefteris

関連する問題