我想要实现的是获取美元货币金额,并将其分解为使用每种类型中最少的金额来计算每个账单和硬币的数量.
我匆匆写了这篇文章,它有效,但我觉得它可以改进.此外,我不得不围绕其余部分,因为我得到一个奇怪的结果一旦它得到像(0.13 - (1*0.1)而不是0.3它会出现0.299999995
下面的代码确实有效.
function moneybreak ($amount, $sizebill) {
// get units of sizecurrency
$numbills = floor($amount / $sizebill);
$remainder = $amount - ($numbills * $sizebill);
$remainder = round($remainder, 2);
$ret['bills'] = $numbills;
$ret['remain'] = $remainder;
return $ret;
}
$amount = 1999.99;
$money = array();
$tmoney = moneybreak($amount, 500);
$money['fivehundred'] = ($tmoney['bills'] > 0) ? $tmoney['bills'] : 0.00;
$tmoney = moneybreak($tmoney['remain'], 100);
$money['onehundred'] = ($tmoney['bills'] > 0) ? $tmoney['bills'] : 0.00;
$tmoney = moneybreak($tmoney['remain'], 20);
$money['twenty'] = ($tmoney['bills'] > …Run Code Online (Sandbox Code Playgroud) 我有这个代码,它接受来自Core Data的收入对象数组.
- (void)totalIncome:(NSMutableArray *)IncomesArray {
int i;
int total;
for (i = 0; i < [IncomesArray count]; ++i)
{
Income *income = [IncomesArray objectAtIndex:i];
total += (int)[income value];
NSLog(@"%@", total);
}
self.totalIncomes = [[NSNumber alloc] initWithInt:(int)total];
NSLog(@"%.2f", self.totalIncomes);
}
Run Code Online (Sandbox Code Playgroud)
但行NSLog(@"%@",总计); 导致EXEC BAD ACCESS错误.有没有明显的事我做错了.此外,如果我删除日志,则没有添加到totalIncomes中,在我的头文件中声明为NSNumber.谢谢.
我试图每次将 float 的值增加 0.1。但有一段时间我得到了非常奇怪的结果。
float kmVal = 0.0f;
EditText kms = (EditText) findViewById(R.id.km);
kmVal = Float.valueOf(kms.getText().toString());
Run Code Online (Sandbox Code Playgroud)
单击按钮时,我正在增加值。
kmVal += 0.1;
kms.setText(String.valueOf(kmVal));
Run Code Online (Sandbox Code Playgroud)
日志 :-
06-24 13:16:21.644: I/System.out(958): Value ==0.1
06-24 13:16:21.644: I/System.out(958): String Value ==0.1
06-24 13:16:21.886: D/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol
06-24 13:16:22.145: I/System.out(958): Value ==0.2
06-24 13:16:22.145: I/System.out(958): String Value ==0.2
06-24 13:16:22.384: I/System.out(958): Value ==0.3
06-24 13:16:22.384: I/System.out(958): String Value ==0.3
06-24 13:16:22.484: I/System.out(958): Value ==0.4
06-24 13:16:22.484: I/System.out(958): String Value ==0.4 …Run Code Online (Sandbox Code Playgroud) 我有一个"余额"字符串,前面有一个美元符号.我想修改这个标志,所以我可以将sting转换为double,但我的代码不起作用.
这是我尝试过的:
String balance = "$5.30";
balance = balance.replaceFirst("$", "");
Run Code Online (Sandbox Code Playgroud)
看起来代码没有任何区别.为了使它更奇怪,下面的代码完全符合我的需要:
String balance = "$5.30";
balance = balance.replaceFirst(".", "");
Run Code Online (Sandbox Code Playgroud)
即使我只能使用第二个代码,我想了解它为什么会导致这个结果.
我正在玩普通的旧C.我只是计算一些便士,然后在一定次数的迭代中以指数方式增加数量.在这个过程的最后,我想要在屏幕上以美元和美分显示大量的美分/便士.
我的输出电流如下所示:
"You have 805306365 pennies"
Run Code Online (Sandbox Code Playgroud)
我试图通过将一个新变量定义为float来将此数字转换为美元:
float totalD = total / 100.00;
Run Code Online (Sandbox Code Playgroud)
输出显示8053063.50.为什么这个int的划分造成了15美分的损失?我试图通过"printf"显示它,如果这有助于:
printf("You have %.2f dollars", totalD);
Run Code Online (Sandbox Code Playgroud)
我知道我可以把我的美分转换成一个字符串,并尝试格式化它,但我喜欢,但我很困惑为什么一个浮点数会这样做.任何人都可以告诉我为什么会发生这种情况,以及如何处理它?
我正在设计一个收银机,我必须比较2个浮点值,每次比较时我都会收到错误.ie因为我无法将最多2位小数的差值四舍五入并将其与值进行比较.
例如.如果客户支付的金额为60.36且发出的账单为30.24,则差异为30.120001.我甚至尝试使用floor函数将其四舍五入为二位数:floorf(diff*100 + .5)/ 100; 但它不起作用.
我应该如何舍入十进制数字并将其用于设计收银机?
我有一个代表一美元金额的字符串,我正在尝试使用.replaceAll("$","")来准备它与parseDouble()一起使用.但是,当我运行我的应用程序时,我仍然得到一个java.lang.NumberFormatException: Invalid double: "$100.00"所以似乎无论出于何种原因,replaceAll()都无法正常工作.谁有人建议为什么?
这是受影响的代码块:
public String subtractCurrenciesToString(String value1, String value2){
String stringValue1 = value1.replaceAll("$", "");
String stringValue2 = value2.replaceAll("$", "");
Double currency1 = Double.parseDouble(stringValue1);
Double currency2 = Double.parseDouble(stringValue2);
return MoneyFormat.format(currency1 - currency2);
}
Run Code Online (Sandbox Code Playgroud)
注意:MoneyFormat是使用getCurrencyInstance()初始化的NumberFormat对象.
还有,为什么浮点不应使用货币的操作和可爱的例子给出的SO的大讨论在这里从Bloch的Effective Java的.
我正在玩这个,发现一些奇怪的东西.如果数字是双倍的:
System.out.println(1.03d - .42d);
//prints out 0.6100000000000001.
Run Code Online (Sandbox Code Playgroud)
但是,如果数字是浮点数:
System.out.println(1.03f - .42f);
//prints out 0.61.
Run Code Online (Sandbox Code Playgroud)
为什么这对浮子也不会以同样的方式失败?两种类型都容易出现同样的问题,但是导致行为差异的原因是什么?
想象一下,我有一个p有2股票的投资组合port_stocks.我想要做的是对每个进行计算port_stock,然后总结所有结果.
[60] pry(main)> p.port_stocks
=> [#<PortStock:0x00007fd520e064e0
id: 17,
portfolio_id: 1,
stock_id: 385,
volume: 2000,
purchase_price: 5.9,
total_spend: 11800.0>,
#<PortStock:0x00007fd52045be68
id: 18,
portfolio_id: 1,
stock_id: 348,
volume: 1000,
purchase_price: 9.0,
total_spend: 9000.0>]
[61] pry(main)>
Run Code Online (Sandbox Code Playgroud)
所以,从本质上讲,使用上面的代码我想这样做:
ps = p.port_stocks.first #(`id=17`)
first = ps.volume * ps.purchase_price # 2000 * 5.9 = 11,800
ps = p.port_stocks.second #(`id=18`)
second = ps.volume * ps.purchase_price # 1000 * 9.0 = 9,000
first + second = 19,800
Run Code Online (Sandbox Code Playgroud)
我想简单地说19,800.理想情况下,我想以非常Ruby的方式做到这一点.
如果我只是简单地总结1中的所有值total_spend …
我有这门课:
\nclass Product {\n public double price;\n\n public Product(double price) {\n this.price = price;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n还有一张地图:
\nMap<Product, Integer> products = new HashMap<>();\nRun Code Online (Sandbox Code Playgroud)\n其中包含添加的几种产品,如下所示:
\nproducts.put(new Product(2.99), 2);\nproducts.put(new Product(1.99), 4);\nRun Code Online (Sandbox Code Playgroud)\n我想使用流计算所有乘积的总和乘以值?我试过:
\ndouble total = products.entrySet().stream().mapToDouble((k, v) -> k.getKey().price * v.getValue()).sum();\nRun Code Online (Sandbox Code Playgroud)\n但它无法编译,我得到 \xe2\x80\x9c无法解析方法getValue()\xe2\x80\x9d。
我预计:
\n(2.99 * 2) + (1.99 * 4) = 5.98 + 7.96 = 13.94\nRun Code Online (Sandbox Code Playgroud)\n