Assuming that a click on the "log" button would need to take the logarithm of what is already in the display, and you want to stick with the overall idea that you started with (from Geeks for Geeks), including the use of eval
, you could enrich the dis
and solve
functions as follows:
function dis(val) {
// Treat a dollar sign as a place holder for where the already
// displayed expression should be put. Default is: in front
// of the new value:
if (!val.includes("$")) val = "$" + val;
document.getElementById("result").value =
val.replace("$", document.getElementById("result").value);
}
function solve() {
// Prefix any name with `Math.`, assuming that this name is a property function
// of the `Math` object:
let x = document.getElementById("result").value.replace(/[a-z]+/g, "Math.$&");
let y = eval(x)
document.getElementById("result").value = y
}
Then in your HTML, just put that $
which we treat here as a place holder for the expression that is already in the calculator's display:
<tr>
<td><input type="button" value="log" onclick="dis('log($)')"/></td>
<td><input type="button" value="sin" onclick="dis('sin($)')"/></td>
<td><input type="button" value="cos" onclick="dis('cos($)')"/></td>
<td><input type="button" value="tan" onclick="dis('tan($)')"/></td>
</tr>
Applied to the original code, that leads to this snippet:
function dis(val) {
// Treat a dollar sign as a place holder for where the already
// displayed expression should be put. Default is: in front
// of the new value:
if (!val.includes("$")) val = "$" + val;
document.getElementById("result").value =
val.replace("$", document.getElementById("result").value);
}
function solve() {
// Prefix any name with `Math.`, assuming that this name is a property function
// of the `Math` object:
let x = document.getElementById("result").value.replace(/[a-z]+/g, "Math.$&");
let y = eval(x)
document.getElementById("result").value = y
}
function clr() {
document.getElementById("result").value = ""
}
.title {
margin-bottom: 10px;
text-align: center;
width: 210px;
color: green;
border: solid black 2px;
}
input[type="button"] {
background-color: green;
color: black;
border: solid black 2px;
width: 100%
}
input[type="text"] {
background-color: white;
border: solid black 2px;
width: 100%
}
<div class="title">GeeksforGeeks Calculator</div>
<table border="1">
<tr>
<td colspan="3"><input type="text" id="result" /></td>
<!-- clr() function will call clr to clear all value -->
<td><input type="button" value="c" onclick="clr()" /> </td>
</tr>
<tr>
<!-- create button and assign value to each button -->
<!-- dis("1") will call function dis to display value -->
<td><input type="button" value="1" onclick="dis('1')" /> </td>
<td><input type="button" value="2" onclick="dis('2')" /> </td>
<td><input type="button" value="3" onclick="dis('3')" /> </td>
<td><input type="button" value="/" onclick="dis('/')" /> </td>
</tr>
<tr>
<td><input type="button" value="4" onclick="dis('4')" /> </td>
<td><input type="button" value="5" onclick="dis('5')" /> </td>
<td><input type="button" value="6" onclick="dis('6')" /> </td>
<td><input type="button" value="-" onclick="dis('-')" /> </td>
</tr>
<tr>
<td><input type="button" value="7" onclick="dis('7')" /> </td>
<td><input type="button" value="8" onclick="dis('8')" /> </td>
<td><input type="button" value="9" onclick="dis('9')" /> </td>
<td><input type="button" value="+" onclick="dis('+')" /> </td>
</tr>
<tr>
<td><input type="button" value="." onclick="dis('.')" /> </td>
<td><input type="button" value="0" onclick="dis('0')" /> </td>
<!-- solve function call function solve to evaluate value -->
<td><input type="button" value="=" onclick="solve()" /> </td>
<td><input type="button" value="*" onclick="dis('*')" /> </td>
</tr>
<tr>
<td><input type="button" value="log" onclick="dis('log($)')" /></td>
<td><input type="button" value="sin" onclick="dis('sin($)')" /></td>
<td><input type="button" value="cos" onclick="dis('cos($)')" /></td>
<td><input type="button" value="tan" onclick="dis('tan($)')" /></td>
</tr>
</table>
Note that the logarithm here is the natural logarithm.