我需要有关计算器中小数按钮的帮助。它现在以某种方式工作,但我需要进一步完善它,但有点不知道如何。因此,如果您知道如何使其更好,请提供帮助。因此,如果您知道如何解决它,请这样做。谢谢你。
如何在打印输出中添加小数
问题是当我按数字并按小数后,它可以工作,例如 2.34,但问题是你可以在每个数字后按小数,例如 2.3.4,这不是我想要的。
这是一段 JavaScript 代码>>>>>>>>
function getHistory() {
return document.getElementById("history-value").innerHTML;
}
function printHistory(num) {
document.getElementById("history-value").innerHTML = num;
}
function getOutput() {
return document.getElementById("output-value").innerHTML;
}
function printOutput(num) {
if (num == "") {
document.getElementById("output-value").innerHTML = num;
} else {
document.getElementById("output-value").innerHTML = getFormatNumber(num);
}
}
function getFormatNumber(num) {
if (num == "-") {
return "";
}
if (num.length > 10) {
num = num.substr(0, 10);
alert("it tooo much!");
}
var n = Number(num);
if (n === "Infinity") {
value = "0";
alert("Error");
} else {
var value = n.toLocaleString("en");
}
return value;
}
function reverseNumberFormat(num) {
return Number(num.replace(/,/g, ""));
}
let operator = document.getElementsByClassName("operator");
for (let i = 0; i < operator.length; i++) {
operator[i].addEventListener("click", function () {
if (this.id == "clear") {
printOutput("");
printHistory("");
} else if (this.id == "backspace") {
let output = reverseNumberFormat(getOutput()).toString();
if (output) {
output = output.substr(0, output.length - 1);
printOutput(output);
}
} else {
let output = getOutput();
let history = getHistory();
if (output == "" && history != "") {
if (isNaN(history[history.length - 1])) {
history = history.substr(0, history.length - 1);
}
}
if (output != "" || history != "") {
output = output == "" ? output : reverseNumberFormat(output);
history = history + output;
if (this.id == "=") {
let result = eval(history);
printOutput(result);
printHistory("");
} else {
history = history + this.id;
printHistory(history);
printOutput("");
}
}
}
});
}
let number = document.getElementsByClassName("number");
for (let i = 0; i < number.length; i++) {
number[i].addEventListener("click", function () {
let output = reverseNumberFormat(getOutput());
if (output != NaN) {
output += this.id;
printOutput(output);
}
});
}
<div id="calculator">
<div id="result">
<div id="history">
<p id="history-value"></p>
</div>
<div id="output">
<p id="output-value"></p>
</div>
</div>
<div id="keyboard">
<button class="operator" id="clear">C</button>
<button class="operator" id="backspace">CE</button>
<button class="operator" id="%">%</button>
<button class="operator" id="/">÷</button>
<button class="number" id="7">7</button>
<button class="number" id="8">8</button>
<button class="number" id="9">9</button>
<button class="operator" id="*">×</button>
<button class="number" id="4">4</button>
<button class="number" id="5">5</button>
<button class="number" id="6">6</button>
<button class="operator" id="-">-</button>
<button class="number" id="1">1</button>
<button class="number" id="2">2</button>
<button class="number" id="3">3</button>
<button class="operator" id="+">+</button>
<button class="number zero" id="0">0</button>
<button class="operator" id=".">.</button>
<button class="operator" id="=">=</button>
</div>
</div>
</div>
一些改变是必要的
第一(1):将点
.
运算符类名更改为number
,如下所示
<button class="number" id=".">.</button>
第二 (2):在
getFormatNumber
中将其替换为此更新。
function getFormatNumber(num) {
if (num == "-") {
return "";
}
if (num.length > 10) {
num = num.substr(0, 10);
alert("it tooo much!");
}
// to check whether a dot is placed just a the end of num like 6.
let lastIndexOfDot = num.toString().lastIndexOf(".") ;
let isDotted =lastIndexOfDot == false ? false: lastIndexOfDot == num.length-1 ? true : false ;
var n = Number(num);
if (n === "Infinity") {
value = "0";
alert("Error");
} else {
var value = n.toLocaleString("en");
}
// if dotted is true then value has a dot at the end like : 5. so we return value with its dot
if (isDotted ) return value +"." ;
return value; // no dot at the end
}
-第三 (3 ) 在属于
handler
的所有元素的 class number
中,将其替换为新的 event handler
let number = document.getElementsByClassName("number");
for (let i = 0; i < number.length; i++) {
number[i].addEventListener("click", function () {
let output = reverseNumberFormat(getOutput());
if (output != NaN ) {
output += this.id;
// CHECK HERE IF output is already a valid decimal number
let matchCount = output.match(/\./g) ;
if( matchCount && matchCount.length > 1 ) return ; // => already decimal number
printOutput(output);
}
});
}
reverseNumberFormat
函数中的(4)中的四项替换为this
function reverseNumberFormat(num) {
return num.replace(/,/g, ""); // => Nb: conversion not necessary
}
注意:这很有帮助,而且对我来说很有效,但如果将来有任何错误或问题,请随时通知我。
我有同样的问题,已经在 css 和 html 中添加了“小数按钮”和其他内容,但不知道如何为“小数按钮”编写函数。
这些是Js代码;
let runningTotal =0;
let buffer ="0";
let previousOperator;
const screen= document.querySelector('.screen');
function buttonClick(value){
if(isNaN(value)){
handleSymbol(value);
}else{
handleNumber(value);
}
screen.innerText = buffer;
}
function handleSymbol(symbol){
switch(symbol){
case'C':
buffer = '';
runningTotal = 0;
break;
case '=':
if(previousOperator === null){
return
}
flushOperation(parseInt(buffer));
previousOperator = null;
buffer = runningTotal;
runningTotal = 0;
break;
case '←':
if(buffer.length ===1){
buffer = '0';
}else{
buffer = buffer.substring(0, buffer.length - 1);
}
break;
case '+':
case '−':
case '×':
case '÷':
handleMath(symbol);
break;
}
}
function handleMath(symbol){
if(buffer === '0'){
return;
}
const intBuffer = parseInt(buffer);
if(runningTotal === 0){
runningTotal = intBuffer;
}else{
flushOperation(intBuffer);
}
previousOperator = symbol;
buffer = '';
}
function flushOperation(intBuffer){
if(previousOperator === '+'){
runningTotal += intBuffer;
}else if(previousOperator === '−'){
runningTotal -= intBuffer;
}else if(previousOperator === '×'){
runningTotal *= intBuffer;
}else if(previousOperator === '÷'){
runningTotal /= intBuffer;
}
}
function handleNumber(numberString){
if(buffer === "0"){
buffer = numberString;
}else{
buffer += numberString;
}
}
function init(){
document.querySelector('.calc-buttons').addEventListener('click', function(event){
buttonClick(event.target.innerText);
})
}
init();
html{
box-sizing: border-box;
height: 100%;
}
*,
*::before,
*::after{
box-sizing: inherit;
margin: 0;
padding: 0;
}
body{
align-items: center;
background-color: #FA8BFF;
background-image: linear-gradient(45deg, #FA8BFF 0%, #2BD2FF 52%, #2BFF88 90%);
display: flex;
font-family: 'Dosis ExtraBold', sans-serif;
font-display: swap;
height: inherit;
justify-content: center;
}
.title{
backdrop-filter: blur(5.5px);
-webkit-backdrop-filter: blur(5.5px);
border-radius: 16px;
box-shadow: 0 4px 30px rgba(35, 35, 35, 0.1);
color: #232323;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
background: rgba(255, 255, 255, 0.3);
border: 1px solid rgba(255, 255, 255, 0.34);
flex-basis: 400px;
height: 90px;
padding: 20px 35px;
margin-top: 1% 9;
margin-bottom: 4%;
}
.wrapper{
backdrop-filter: blur(5.5px);
-webkit-backdrop-filter: blur(5.5px);
border-radius: 16px;
box-shadow: 0 4px 30px rgba(35, 35, 35, 0.1);
color: #232323;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
background: rgba(255, 255, 255, 0.3);
border: 1px solid rgba(255, 255, 255, 0.34);
flex-basis: 400px;
height: 650px;
padding: 20px 35px;
}
.screen{
backdrop-filter: blur(5.5px);
-webkit-backdrop-filter: blur(5.5px);
background: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(255, 255, 255, 0.01);
border-radius: 16px;
box-shadow: 0 4px 30px rgba(35, 35, 35, 0.1);
color: #232323;
font-size: 35px;
overflow: auto;
padding: 20px;
text-align: right;
width: 350px;
height: 100px;
}
.calc-button-row{
display: flex;
justify-content: space-between;
margin: 5% 0;
}
.calc-button{
backdrop-filter: blur(5.5px);
-webkit-backdrop-filter: blur(5.5px);
background: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(255, 255, 255, 0.01);
border-radius: 16px;
box-shadow: 0 4px 30px rgba(35, 35, 35, 0.1);
color: #232323;
flex-basis: 20%;
font-family: inherit;
font-size: 24px;
height: 65px;
}
.calc-button:last-child{
backdrop-filter: blur(5.5px);
-webkit-backdrop-filter: blur(5.5px);
background: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(255, 255, 255, 0.01);
border-radius: 16px;
box-shadow: 0 4px 30px rgba(35, 35, 35, 0.1);
color: #fff;
background: #434b75;
}
.calc-button:last-child:hover{
background-color: #434b75;
color: #fff;
}
.calc-button-row:hover{
background-color: inherit;
}
.calc-button:active{
background-color: #FA8BFF;
}
.double{
flex-basis: 47%;
}
.triple{
flex-basis: 73%;
}
.calc-button:last-child:active{
background-color: #2BFF88;
}
.double{
flex-basis: 47%;
}
.triple{
flex-basis: 73%;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Bemreq Calculator</title>
</head>
<body>
<div class="wrapper">
<div class="baslik"><h1 class="başlik">Bemreq Calculator</h1>
<style>
h1{
text-align: center;
}
</style>
</div>
<section class="screen"></section>
<section class="calc-buttons">
<div class="calc-button-row">
<button class="calc-button double">
C
</button>
<button class="calc-button">
←
</button>
<button class="calc-button">
÷
</button>
</div>
<div class="calc-button-row">
<button class="calc-button">
7
</button>
<button class="calc-button">
8
</button>
<button class="calc-button">
9
</button>
<button class="calc-button">
×
</button>
</div>
<div class="calc-button-row">
<button class="calc-button">
4
</button>
<button class="calc-button">
5
</button>
<button class="calc-button">
6
</button>
<button class="calc-button">
−
</button>
</div>
<div class="calc-button-row">
<button class="calc-button">
1
</button>
<button class="calc-button">
2
</button>
<button class="calc-button">
3
</button>
<button class="calc-button">
+
</button>
</div>
<div class="calc-button-row">
<button class="calc-button double">
0
</button>
<button class="calc-button">
,
</button>
<button class="calc-button">
=
</button>
</div>
</section>
</div>
<script src="script.js"></script>
</body>
</html>