소숫점 2자리 덧셈은 되는데 결과값이 소숫점아래로 한없이 갑니다~^^;;
본문
아래 소스를 보시면 onclick="cal_erp();" 를 하면 어떨때는 결과값이 소숫점2자리까지 나올때가 있고, 때로는 소숫점아래로 한없이 갑니다~^^;;
며칠째 삽질하고 있습니다.
무엇이 잘못되었나요?
<-------------------------------------------------------------------------------------------------------------->
<div class="form-group"> <!-- 신선육 폼 그룹 시작 -->
<label class="col-sm-2 control-label" >신선육 </label>
<div class="col-sm-10">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th width="179"><p align="left">품명 및 규격</p></th>
<th width="93"><p align="right">이월재고</p></th>
<th width="93"><p align="right">입고</p></th>
<th width="93"><p align="right">출고</p></th>
<th width="93"><p align="right">전산재고</p></th>
<th></th> <!-- 계산기 -->
<th width="93"><p align="right">실사재고</p></th>
<th width="100"><p align="right">단위</p></th>
<th width="93"><p align="right">유통기간</p></th>
<th width="93"><p align="right">조정재고</p></th>
<th></th> <!-- 계산기 -->
</tr>
</thead>
<tbody>
<tr>
<td>삼겹살</td>
<!-- 연산 시작 -->
<script type="text/javascript">
function isNumberKey(evt) { // 숫자를 제외한 값을 입력하지 못하게 한다.
var charCode = (evt.which) ? evt.which : event.keyCode;
// Textbox value
var _value = event.srcElement.value;
if (event.keyCode < 48 || event.keyCode > 57) {
if (event.keyCode != 46) { //숫자와 . 만 입력가능하도록함
return false;
}
}
// 소수점(.)이 두번 이상 나오지 못하게
var _pattern0 = /^\d*[.]\d*$/; // 현재 value값에 소수점(.) 이 있으면 . 입력불가
if (_pattern0.test(_value)) {
if (charCode == 46) {
return false;
}
}
// 여덟 자리 이하의 숫자만 입력가능
var _pattern1 = /^\d{8}$/; // 현재 value값이 8자리 숫자이면 . 만 입력가능
// {숫자}의 값을 변경하면 자리수를 조정할 수 있다.
if (_pattern1.test(_value)) {
if (charCode != 46) {
alert("두자리 이하의 숫자만 입력가능합니다");
return false;
}
}
// 소수점 둘째자리까지만 입력가능
var _pattern2 = /^\d*[.]\d{2}$/; // 현재 value값이 소수점 둘째짜리 숫자이면 더이상 입력 불가
// {숫자}의 값을 변경하면 자리수를 조정할 수 있다.
if (_pattern2.test(_value)) {
alert("소수점 둘째자리까지만 입력가능합니다.");
return false;
}
return true;
}
function cal_erp() // 전산재고 연산한다.
{
var a = document.getElementById("wr_1").value;
var b = document.getElementById("wr_2").value;
var c = document.getElementById("wr_3").value;
var d = document.getElementById("wr_4").value;
document.getElementById("wr_4").value = parseFloat(a)+parseFloat(b)-parseFloat(c);
d = d.toFixed(2);
}
function cal_stock() // 재고조정 연산한다.
{
var d = document.getElementById("wr_4").value;
var e = document.getElementById("wr_5").value;
var f = document.getElementById("wr_8").value;
document.getElementById("wr_8").value = parseFloat(d)-parseFloat(e);
f = f.toFixed(2); //to.Fixed(x)로 소수점 아래 2개를 출력
}
</script>
<!-- 연산 끝 -->
<td>
<input type="text" id="wr_1" name="wr_1" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_1'];?>" class="form-control input-sm" size="8" maxlength="8"> <!--이월재고--></td>
<td>
<input type="text" id="wr_2" name="wr_2" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_2'];?>" class="form-control input-sm" size="8" maxlength="8" > <!--입고--></td>
<td>
<input type="text" id="wr_3" name="wr_3" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_3'];?>" class="form-control input-sm" size="8" maxlength="8" > <!--출고--></td>
<td>
<input type="text" id="wr_4" name="wr_4" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_4'];?>" class="form-control input-sm" size="8" maxlength="8">
<td><i class="fa fa-calculator" style="font-size:24px;color:red" onclick="cal_erp();"></i> <!--전산재고--> </td>
<td>
<input type="text" id="wr_5" name="wr_5" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_5'];?>" class="form-control input-sm" size="8" maxlength="8" > <!--실사재고--></td>
<td><select name="wr_6" value="<?php echo $write['wr_6'];?>" id="wr_6" class="form-control"> <!--규격 -->
<option value="">선택하세요</option>
<option>kg </option>
<option>팩 </option>
<option>box </option> </td>
<td><input type="date" name="wr_7" value="<?php echo $write['wr_7'];?>" id="wr_7" class="form-control input-sm" size="8" maxlength="8"><!--유통기간--></td>
<td>
<input type="text" id="wr_8" name="wr_8" onKeyPress="return isNumberKey(event);" value="<?php echo $write['wr_8'];?>" class="form-control input-sm" size="8" maxlength="8" > </td>
<td><i class="fa fa-calculator" style="font-size:24px;color:red" onclick="cal_stock();"></i> <!--조정재고--> </td>
</tr>
</tbody>
</table>
</div>
</div>
</div> <!-- 신선육 폼 그룹 끝 -->
답변 2
document.getElementById("wr_8").value = parseFloat(d)-parseFloat(e);
f = f.toFixed(2); //to.Fixed(x)로 소수점 아래 2개를 출력
각각의 함수마다 해당 부분이 있는데 값을 반영 한 곳에는 toFixed(2)로 소수점 처리가 되지 않아서 그렇습니다.
실질적으로 값이 들어가고 반영되는 부분은 document.getElementbyId('아이디').value = ""부분입니다.
var d = document.getElementById("wr_4").value;
var e = document.getElementById("wr_5").value;
var f = parseFloat(d)-parseFloat(e);
document.getElementById("wr_8").value = f.toFixed(2);
이런식으로 수정해주셔야 합니다 f에 해당 아이디의 value는 값만 리턴을 하는 형태이기때문에 해당 방법처럼 변수에 할당하면 값을 가져오고 끝납니다.
그 후에 엘리먼트가 어떤식으로 변화하든 가져온 시점의 값만 변수에 저장되며, 그 변수가 바뀌더라도 해당 값을 가져왔었던 엘리먼트에 영향을 미치지 않습니다.
만약 변수 f에 해당 엘리먼트 자체를 할당하고 싶다면
var f = document.getElementById('wr_8');
f.value = "값";
이런식으로 하셔야 value값에 제대로 반영이 됩니다.
!-->!-->!-->볼피드님, 감사합니다~^^
방금 테스트해서 성공했습니다~
좋은 팁(비법^^?)과 지식을 공유해 주셔서 감사합니다~^^)b
행복한 날들 되세요~~~
답변을 작성하시기 전에 로그인 해주세요.