我确信这是因为最后的“g”,但这是我尝试计算比率百分比时的情景和结果。我总是希望将最高的2个数字除以最低值。
$item1 = "200.00g";
$item2 = "50.00g";
$calc = round((max($item1,$item2) / min($item1,$item2))*100) . "%";
// result: $calc = "400%"
$item1 = "100.00g";
$item2 = "5.00g";
$calc = round((max($item1,$item2) / min($item1,$item2))*100) . "%";
// result: $calc = "2000%"
PROBLEM RESULT:
$item1 = "8.00g";
$item2 = "14.00g";
$calc = round((max($item1,$item2) / min($item1,$item2))*100) . "%";
// result: $calc = "57%"
// I am expecting (14.00g / 8.00g)*100 = "175%"
答案 0 :(得分:2)
它是类型铸造;
$item1 = "8.00";
$item2 = "14.00";
$calc = round((max($item1,$item2) / min($item1,$item2))*100) . "%";
结果将是175%
答案 1 :(得分:2)
如果您想在数学运算中使用字符串,并且您知道单位放在示例中的末尾,则可以将变量转换为浮点数:
$item1_numeric = (float) $item1;
但显然最好在变量/数据库中分隔值和单位。
答案 2 :(得分:0)
当你进行回合时,使用:$ item1的substr($ item1,0,-1)instade,$ item2的substr($ item2,0,-1)instade。
您无法将2个字符串与round()进行比较。
编辑:如果$ item1 =“200g”,则ma解决方案正常,但如果$ item1 =“200.00g”则需要删除“。”在round()之前使用例如pregreplace。
答案 3 :(得分:0)
哦,YAPHPB - 我最喜欢的一个。即使它是用the Doc写的:
When [max()] given a string it will be cast as an integer when comparing.
......这只是一个部分事实:如果至少有一个比较值是数字或数字字符串。
否则所有字符串将被比较为字符串:将比较每个字符串的第一个{0}个字符,然后是{1},然后是{2} ...等等。
所以基本上就是这里发生的事情:
echo max("200.00g", "50.00g"); // 50.00g, as '5' > '2'
echo max("200.00g", 50); // "200.00g", as it gets converted to int (become 200)
这更加疯狂:
echo max("200.00g", "1000.00"); // "200.00g", as '2' > '1'
echo max("200.00", "1000.00"); // "1000.00", as we tried to help you, no, really!
后者的结果实际上可以由知道numeric概念的人预测:当两个字符串都是纯数字时,它们在比较时会转换为数字。尽管如此,我发现这种行为至少可以说是不可靠的。
底线:如果您需要比较数字,请比较数字,期间。 PHP中的类型转换可能会变得非常混乱 - 当您最不期望它时,会让您陷入困境。 )