我正在努力解决一个浮点数问题,其中var变化返回为0.0999循环,我需要返回0.01(一便士)。由于这个问题,代码运行良好,除了最后一分钱。这是我在这里的第一个帖子,所以请原谅格式...
function checkCashRegister(price, cash, cid) {
var change = cash - price;
var totalCid =0;
for(var i = 0; i < cid.length; i++) totalCid += cid[i][1];
var returnArr = [["PENNY",0], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0],["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]];
function hasValue (value) {return value[1] > 0;}
if(change>totalCid) {
return "Insufficient Funds";
}
else if(change==totalCid) {
return "Closed";
}
else {
while(change >= 0.01) {
if (change >=100 && cid[8][1] >= 100){
change -= 100;
cid[8][1] -= 100;
returnArr[8][1] += 100;
}
else if (change >= 20 && cid[7][1] >= 20){
change -= 20;
cid[7][1] -= 20;
returnArr[7][1] += 20;
}
else if (change >= 10 && cid[6][1] >= 10){
change -= 10;
cid[6][1] -= 10;
returnArr[6][1] += 10;
}
else if (change >= 5 && cid[5][1] >= 5){
change -= 5;
cid[5][1] -= 5;
returnArr[5][1] += 5;
}
else if (change >= 1 && cid[4][1] >= 1){
change -= 1;
cid[4][1] -= 1;
returnArr[4][1] += 1;
}
else if (change >= 0.25 && cid[3][1] >= 0.25) {
change -= 0.25;
cid[3][1] -= 0.25;
returnArr[3][1] += 0.25;
}
else if (change >= 0.10 && cid[2][1] >= 0.10){
change -= 0.10;
cid[2][1] -= 0.10;
returnArr[2][1] += 0.10;
}
else if (change >= 0.05 && cid[1][1] >= 0.05){
change -= 0.05;
cid[1][1] -= 0.05;
returnArr[1][1] += 0.05;
}
else if (change >= 0.01 && cid[0][1] >= 0.01){
change -= 0.01;
cid[0][1] -= 0.01;
returnArr[0][1] += 0.01;
}
else return "Insufficient Funds";
}
return returnArr.filter(hasValue).reverse();
}
}
checkCashRegister(3.26, 100.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]);
提前道谢!
通过对处理PENNY的“else if”条件中的“change”进行以下修改,可以得到预期的答案[“PENNY”,0.04]
change=change.toFixed(2)-0.01;
问题内容: 我在MySQL数据库架构中引入浮点列时遇到了一个问题,即对浮点值的比较不会总是返回正确的结果。 1-50.12 2-34.57 3-12.75 4-…(其余均小于12.00) 这将返回“ 3”。 我已经读过,在MySQL中比较浮点值是一个坏主意,十进制类型是更好的选择。 我是否有希望继续使用float类型,并使比较正常工作? 问题答案: 您是否注意到以下问题? 在某些行之间有一个额外的
问题内容: 我似乎在使用浮点数时失去了很多精度。 例如,我需要求解一个矩阵: 这是我用来从文本文件导入矩阵的代码: 我需要使用gauss-seidel进行求解,因此需要重新排列x,y和z的方程式: 这是我用来重新排列方程式的代码。是系数矩阵,是答案向量: 但是,我得到的答案并不精确到小数位。 例如,从上面重新排列第二个方程式后,我应该得到: 我得到的是: 这看起来似乎不是一个大问题,但是当您将数字
我正在纠结于一个基本的浮点精度问题。问题就在这里: 运行代码得到“否”
14. 浮点数运算:问题和局限 浮点数在计算机硬件中表示为以 2 为底(二进制)的小数。例如,十进制小数 0.125 是1/10 + 2/100 + 5/1000 的值,同样二进制小数 0.001 是 0/2 + 0/4 + 1/8 的值。这两个小数具有相同的值,唯一真正的区别是,第一个小数是十进制表示法,第二个是二进制表示法。 不幸的是,大多数十进制小数不能完全用二进制小数表示。结果是,一般
IBM java 8中的BigDecimal在使用MathContext添加浮点数时计算的值不正确。下面是示例代码 上面的代码打印出来1.000000000000000而不是1.004166666666666667 然而,在上面的最后一行代码中,如果删除MathContext,它将返回正确的值1.0041666666666667。 注意:当使用相同的JVM调试上述代码时,在调试模式下,该值也是1.
3.2. 浮点数 Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。 这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8