- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要编写一个 java 程序来计算销售交易的找零。
它只能分配 20 枚、10 枚、5 枚、1 枚、25 美分、10 角硬币、5 分硬币和 1 便士硬币。
我做到了,一切都好,但我有一个问题。当我把 math.round 放在一些数字上时,它们会像 20 欧元中的 1.6 一样四舍五入,并且会带来错误的零钱。如果我把 math.floor 放在硬币后面,它就会减少。我做错了什么?这是我的代码:
公共(public)类 MyCurrencyCashier {
public static void main (String [] args){
float twentyEuro;
float tenEuro;
float fiveEuro;
float oneEuro;
float twentyFiveCent;
float tenCent;
float fiveCent;
float oneCent;
float change; //declares how much change is given in return
change = Float.parseFloat(args[0]); //read the change from the command line
twentyEuro = (change / 20);
if (twentyEuro >= 1) {
change = (change % 20);
System.out.println("€20 bill: " + Math.round(twentyEuro));
} else {
System.out.println("€20 bill: 0");
}
tenEuro = (change / 10);
if (tenEuro >= 1) {
change = (change % 10);
System.out.println("€10 bill: " + Math.round(tenEuro));
} else {
System.out.println("€10 bill: 0");
}
fiveEuro = (change / 5);
if (fiveEuro >= 1) {
change = (change % 5);
System.out.println("€5 bill: " + Math.round(fiveEuro));
} else {
System.out.println("€5 bill: 0");
}
oneEuro = (change / 1);
if (oneEuro >= 1) {
change = (change % 1);
System.out.println("€1 bill: " + Math.round(oneEuro) + "\n");
} else {
System.out.println("€1 bill: 0");
}
twentyFiveCent= (change / 0.25f);
if (twentyFiveCent >= 1) {
change = (change % 0.25f);
System.out.println("25_cent_coins: " + Math.round(twentyFiveCent));
} else {
System.out.println("25_cent_coins: 0");
}
tenCent = (change / 0.10f);
if (tenCent >= 1) {
change = (change % 0.10f);
System.out.println("10_cent_coins: " + Math.round(tenCent));
} else {
System.out.println("10_cent_coins: 0");
}
fiveCent = (change / 0.05f);
if (fiveCent >= 1) {
change = (change % 0.05f);
System.out.println("5_cent_coins: " + Math.round(fiveCent));
} else {
System.out.println("5_cent_coins: 0");
}
oneCent = (change / 0.01f);
if (oneCent >= 1) {
change = (change % 0.01f);
System.out.println("1_cent_coins: " + Math.round(oneCent));
} else {
System.out.println("1_cent_coins: 0");
}
}//end main
}//结束类(class)
我输入了 32.12,我期望
20 欧元账单:1
10 欧元钞票:1
5 欧元账单:0
1 欧元账单:2
25_cent_coins:0
10_cent_coins:1
5_cent_coins:0
1_cent_coins:2
但我明白了:
20 欧元账单:2
10 欧元钞票:1
5 欧元账单:0
1 欧元账单:2
25_cent_coins:0
10_cent_coins:1
5_cent_coins:0
1_cent_coins:2
最佳答案
您根本不必担心对这些数字进行四舍五入;默认情况下,如果您将两个数字相除并将它们强制转换/强制为 int
,它们将自动成为商的下限。
换句话说,如果您执行(int) (32.12/20)
,您将得到 1。这是准确的,因为这个数额的 20 欧元纸币只可能存在。如果您执行 (int) (39.99/20)
也会出现同样的情况,因为同样数量的 20 欧元纸币也只有一张。
您可以使用此信息计算出您需要的具体金额;更重要的是,它们根本不需要存储在 float 中,因为它们是整数。
下面是您可以使用此操作的示例。我将其余的值留给读者作为练习。
int twentyEuro;
float change;
change = Float.parseFloat(args[0]); //read the change from the command line
twentyEuro = (int) (change / 20);
change = change - twentyEuro * 20;
System.out.println("€20 bill: " + twentyEuro);
System.out.println(change);
关于java - 用java编写收银员代码。使用 math.round 它给我更多,而使用 math.floor 有时更少我应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195323/
我有 floor(sqrt(floor(x))) .这是真的: 内部floor是多余的。 外floor是多余的。 最佳答案 显然,外层不是多余的,因为例如,sqrt(2)不是整数,因此 floor(s
如何将 floor 函数应用于 float 或 double 值以获得整数。我得到了 double 值:4.4497083717E10float Value:4.4497084E10 在我的函数中。我
这个问题在这里已经有了答案: Using bitwise OR 0 to floor a number (7 个答案) 关闭 6 年前。 我刚刚在一些 JavaScript 中看到了这个快捷方式。
PHP 中的 floor 函数行为异常。对于 16 个十进制值,它给出了下限值,但通过增加 1 个小数点来舍入。 $int = 0.99999999999999999; echo floor($int
这是我的 HTML: floor 1: {{Math.floor( value ) }} floor 2: {{value }} floor 3: {{value |
(floor) 在 C 中实际上是如何工作的?据 Techonthenet 报道。 com, In the C Programming Language, the floor function ret
我正在将我的 MATLAB 代码转换为 Excel 文档,但在转换以下公式时遇到困难。 x=(b/N)*(-floor(N/2):floor(N/2)) 如果例如 b =2 且 N = 5结果将是
与 math.floor 相比,使用整数除法运算符在性能上有什么好处吗? 7 // 2 结束 math.floor(7/2) 最佳答案 整数除法比 math.floor 函数调用快得多: >>> im
我有一个关于 Haskell 的问题 floor函数 - 它应该返回“不大于参数的最大整数”,但表达式 floor 3.9999999999999999 返回 4 而不是 3。它可能与 Double
我想用可变的十进制长度(在 iphone sdk 中)将小数点后的 double 取整。 这里有一些例子可以告诉你我的意思 NSLog(@"%f",[self floorMyNumber:34.524
我知道 float 通常会包含舍入误差。 当您取 float (或 double )的底限或上限以将其转换为整数时,结果值是否准确,或者“底限”值是否仍然是近似值? 基本上,像 floor(3.141
我正在尝试用 C++ 实现一个系统,我可以在其中判断数字是否为整数(小数点后的所有内容均为零)。为此,我使用了 if (sqrt(answer/2) == floor(sqrt(answer/2)))
我正在编写一段代码,我需要处理不一定在 0 到 1 范围内的 uvs(2D 纹理坐标)。例如,有时我会得到一个 u 分量为 1.2 的 uv。为了处理这个问题,我正在实现一个包装,它通过执行以下操作导
CREATE TABLE table_name (col_a double(10,2), col_b double(10,2), col_c double(10,2)); INSERT INTO ta
这个问题在这里已经有了答案: Why does Math.round(0.49999999999999994) return 1? (5 个答案) 关闭 8 年前。 我开发了一个 c++ 应用程序(
我需要一个函数来将正 double 四舍五入到最接近的整数。潜伏 aorund 我发现这种非常优雅的方式 int x = floor(y + 0.5); 我写了一个简单的测试程序: double a
在 C89 中,floor() 返回一个 double 值。以下是否保证有效? double d = floor(3.0 + 0.5); int x = (int) d; assert(x == 3)
floor() 函数向下舍入为最接近的整数。 语法 floor(x) 参数 描述 x 必需。一个数。 说
有谁知道方法/功能如何Int()或 floor()实现的? 我正在寻找以下相应的实现 abs()功能。 Int Abs (float x){ if x > 0 return x;
我的问题如下:log(1000,10) 返回 3,但 floor(log(1000,10)) 返回 2。如何解决这个问题? 我的 php 版本是 5.6.30-0+deb8u1。 最佳答案 因为 lo
我是一名优秀的程序员,十分优秀!