0

我确信这是因为最后的“g”,但这是我尝试计算比率百分比时的场景和结果。我总是想将两个数字中的最高值除以最低值。

$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%"
4

4 回答 4

2

这是类型转换;

$item1 = "8.00";
$item2 = "14.00";
$calc = round((max($item1,$item2) / min($item1,$item2))*100) . "%";

结果将是 175%

于 2012-07-03T15:17:33.017 回答
2

当您想在数学运算中使用您的字符串,并且您知道该单元在您的示例中放置在末尾时,您可以将变量转换为浮点数:

$item1_numeric = (float) $item1;

但显然,在变量/数据库中将值和单位分开会更好。

于 2012-07-03T15:17:41.733 回答
0

使用: substr($item1, 0, -1) instade of $item1, substr($item2, 0, -1) instade of $item2 当你做回合时。

您不能将 2 个字符串与 round() 进行比较。

编辑:如果 $item1 = "200g",ma 解决方案是可以的,但如果 $item1 = "200.00g" 你需要删除 "." 在 round() 之前,例如 pregreplace。

于 2012-07-03T15:17:16.040 回答
0

哦,YAPHPB——也是我最喜欢的一个。即使它写在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!

后一种结果实际上可以由了解数字概念的人预测:当两个字符串都是纯数字时,它们在比较时会转换为数字。尽管如此,至少可以说,我发现这种行为不可靠。

The bottom line: if you need to compare numbers, compare numbers, period. Type conversion in PHP can get real messy - and bite you in the bottom real hard when you least expect it. )

于 2012-07-03T15:38:17.980 回答