0

我有两个价值观:

$currentValue总是有两位小数(可以是 .00)。

$usersValue可以是整数,也可以是小数点后两位。

我遇到的问题是这些都是字符串(示例):

var_dump($currentValue) = string(6) "100.50"
var_dump($usersValue) = string(5) "52.50" || string(2) "52"

现在我需要对这些做一些逻辑:

if($usersValue > $currentValue) // Is users value greater than the current value
if($usersValue < $currentValue) // Is users value less than the current value
if($usersValue == $currentValue) // Is the users value equal to the current value

在我看来,我认为这两个变量应该始终声明为浮点数,因为$currentValue永远是浮点数,那么你可以做数学......?

所以我的问题:

  1. 如何正确地将字符串转换为浮点数?例如:如果我的$currentValue = string(8) "2,061.14", 和我做$newCurrentValue = (float)$currentValue, $newCurrentValue = string(1) "2"。不知道那里发生了什么?
  2. 如果是$usersValue = string(2) "52",我该如何转换$usersValue = float(52.00)呢?
  3. 如果所有变量都是浮点数,我是否能够执行上述所需的逻辑?从我的测试中,我发现<and>运算符可以工作,但不是==......?

这里真的很困惑,谢谢。

4

2 回答 2

2

要将字符串转换为浮点数,请使用该floatval()函数。

对于$usersValue,可以直接使用函数:

$usersValue = floatval($usersValue);

但这是不可能的$currentValue。您需要先去掉逗号:

$currentValue = str_replace(',', '', $currentValue);
$currentValue = floatval($currentValue);

现在,由于这两个数字属于同一类型,因此您的比较应该有效:

echo ($usersValue > $currentValue) ? '$usersValue greater' : '$currentValue greater';
echo ($usersValue < $currentValue) ? '$currentValue greater' : '$usersValue greater';
echo ($usersValue == $currentValue) ? 'equal' : 'not equal';

输出:

$currentValue greater
$currentValue greater
not equal
于 2013-10-03T16:27:55.083 回答
0

这样做:

$currentValue = (float)$currentValue;
$usersValue = (float)$usersValue;

您的问题是您的值中有一个“,”,浮点数只能包含数字和一个点

于 2013-10-03T16:26:06.023 回答