我坐在一台带有en_US语言环境和这段PHP代码的机器上
setlocale(LC_ALL,'de_DE.utf8');
var_dump((string)1.234);
Run Code Online (Sandbox Code Playgroud)
回报
string(5) "1.234"
Run Code Online (Sandbox Code Playgroud)
而在我的同事的机器上有德国语言环境,它会返回
string(5) "1,234"
Run Code Online (Sandbox Code Playgroud)
为什么PHP在使用类型转换浮点到字符串时使用语言环境?我该如何禁用它?我希望在所有机器上都能使用此函数返回字符串(5)"1.234",而不管任何语言环境设置.
其次,不太重要:为什么PHP会忽略我机器上的setlocale?
自昨天站在超市的销售点以来,再一次试图在试图忽略我身后不耐烦和紧张的队列的同时试图找到我的硬币的最佳分区时,我一直在思考潜在的算法问题:
给定一个值为v 1,...,v n的硬币系统,有限的硬币库存a 1,...,a n和我们需要支付的金额.我们正在寻找一种算法来计算分区x 1,...,x n(0 <= x i <= a i)x 1*v 1 + x 2*v 2 + ... + x n*v n > = s使得和x 1 + ... + x n -R(r)最大化,其中r是变化,即r = x 1*v 1 + x 2*v 2 +. .. + x n*v n - s和R(r)是从收银员返回的硬币数量.我们假设出纳员拥有无限量的所有硬币并且总是返回最小数量的硬币(例如使用SCHOENING等人中解释的贪婪算法).我们还需要确保没有钱的变化,所以最好的解决方案不是简单地给所有的钱(因为在这种情况下解决方案总是最优的).
感谢您的创意投入!
我的编程背景是Java世界,但我刚开始学习C++.我偶然发现了这个相当微不足道的,可能是相当愚蠢的问题,这个问题在某种程度上困扰着我作为Java程序员:
我有一个带有数组的类,它在构造函数中通过new初始化并在析构函数中删除.现在,当我创建这个类的对象并将该类的另一个对象分配给同一个变量时(至少我认为它是这样),析构函数中的delete []方法似乎在变量离开时被调用两次scope(在本例中为main()函数)(调试器给出了_BLOCK_TYPE_IS_VALID断言失败警告).
这是为什么?在为f指定新对象之前,为什么没有调用解构器?我怎么能明确地删除Foo(1)?这到底发生了什么?
class Foo{
private:
int *field;
public:
Foo(int size){
field = new int[size];
}
~Foo(){
delete[] field;
}
};
int main(){
Foo f = Foo(1);
f = Foo(2);
}
Run Code Online (Sandbox Code Playgroud)