PHP字符串浮动

时间:2009-01-26 21:32:22

标签: php string casting floating-point

我根本不熟悉PHP并且有一个简单的问题。

我有2个变量@pricePerUnit和@invoicedUnits。以下是将这些值设置为值的代码:

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);

如果我输出这个,我得到正确的值。让我们说5000个发票单位和1.00的价格。

现在,我需要显示花费的总金额。当我将这两者相乘时,它不起作用(正如预期的那样,这些是字符串)。

但我不知道如何在PHP中解析/转换/转换变量。

我该怎么办?

8 个答案:

答案 0 :(得分:161)

$rootbeer = (float) $InvoicedUnits;

应该为你做。查看Type-Juggling。您还应该阅读String conversion to Numbers

答案 1 :(得分:52)

你想要non-locale-aware floatval function

  

float floatval(mixed $ var) - 获取字符串的浮点值。

示例:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343

答案 2 :(得分:20)

好吧,如果用户写1,00,000,那么floatvar将显示错误。所以 -

floatval(preg_replace("/[^-0-9\.]/","",$input));

这更可靠。

用法:

$input = '1,03,24,23,434,500.6798633 this';
echo floatval(preg_replace("/[^-0-9\.]/","",$input));

答案 3 :(得分:7)

处理浮点数中的标记是一项非常重要的任务。在英语/美国符号中,您可以格式化一千加46 * 10-2:

1,000.46

但在德国你会改变逗号并指出:

1.000,46


这使得在多语言应用程序中猜测正确的数字变得非常困难 我强烈建议使用Zend Framework的Zend_Measure来完成这项任务。该组件将通过用户语言将字符串解析为float。

答案 4 :(得分:1)

使用此函数从任何类型的文本样式中转换浮点值:

function parseFloat($value) {
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,3}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}

此解决方案不依赖于任何区域设置。因此,对于用户输入,用户可以以他们喜欢的任何方式键入浮点值。这非常有用,例如如果你有一个只有英文的项目,但世界各地的人都在使用它,可能没有想到项目需要一个点而不是一个逗号来表示浮点值。 您可以在混合中输入javascript并获取浏览器默认设置,但仍有许多人将这些值设置为英语但仍然键入1,25而不是1.25(特别是但不限于翻译行业,研究和IT)

答案 5 :(得分:1)

您可以遵循此link来了解有关如何在PHP中将字符串/数字转换为数字/浮点数/小数的更多信息。 这是链接的意思...

方法1:使用number_format()函数。 number_format()函数用于将字符串转换为数字。成功返回返回格式化的数字,否则返回E_WARNING。

$num = "1000.314"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num), "\n"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num, 2); 

方法2:使用类型转换:类型转换可以将字符串直接转换为浮点,双精度或整数原始类型。这是将字符串转换为没有任何功能的数字的最佳方法。

// Number in string format 
$num = "1000.314"; 

// Type cast using int 
echo (int)$num, "\n"; 

// Type cast using float 
echo (float)$num, "\n"; 

// Type cast using double 
echo (double)$num; 

方法3:使用intval()和floatval()函数。 intval()和floatval()函数还可用于将字符串分别转换为其相应的整数和浮点值。

// Number in string format 
$num = "1000.314"; 

// intval() function to convert  
// string into integer 
echo intval($num), "\n"; 

// floatval() function to convert 
// string to float 
echo floatval($num); 

方法4:通过加0或执行数学运算。通过将字符串加0,也可以将字符串号转换为整数或浮点数。在PHP中,执行数学运算时,字符串将隐式转换为整数或浮点数。

// Number into string format 
$num = "1000.314"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.1;

答案 6 :(得分:0)

我遇到了执行此操作的标准方法的问题:

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

如果没有有效的数字,则解析器不应返回数字,而应引发错误。 (这是我要抓住我的代码YMMV的条件)

要解决此问题,我已执行以下操作:

$string = "one";

$float = is_numeric($string) ? (float)$string : null;

echo $float; : ( Prints nothing )

然后在进一步处理转换之前,如果没有有效的字符串解析,我可以检查并返回错误。

答案 7 :(得分:0)

如果需要处理无法单独转换的值,则可以使用以下方法:

try {
    $valueToUse = trim($stringThatMightBeNumeric) + 0;
} catch (\Throwable $th) {
    // bail here if you need to
}