PHP字符串浮动

104 php string floating-point casting

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

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

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);
Run Code Online (Sandbox Code Playgroud)

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

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

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

我该怎么办?

Sam*_*son 178

$rootbeer = (float) $InvoicedUnits;
Run Code Online (Sandbox Code Playgroud)

应该为你做.看看Type-Juggling.您还应该阅读String转换为Numbers.

  • 嗯,发票单位现在听起来很美味. (7认同)
  • 另请注意,“11,000.00”将输出 11,而不是预期的 11000.00 (5认同)
  • ^值得注意的是(float)从字符串中删除0,如果它是第一个数字 (2认同)

ear*_*ino 57

您需要非语言环境感知floatval功能:

float floatval(mixed $ var) - 获取字符串的float值.

例:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343
Run Code Online (Sandbox Code Playgroud)

  • 提到区域意识的荣誉.我只花了1.5小时跟踪由不同语言环境导致的问题,导致`(float)`在第一台服务器上转换为","而第二台服务器转换为"," (2认同)

HAD*_*ADI 22

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

floatval(preg_replace("/[^-0-9\.]/","",$input));
Run Code Online (Sandbox Code Playgroud)

这更可靠.

用法:

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

  • 而不是**ereg**使用**preg**`$ string = preg_replace("/ [^ 0-9 \.\ - ] /","",$ string);` (7认同)
  • 是的,ereg,此功能已被弃用.所以需要使用preg而不是ereg :) (4认同)

Tob*_* P. 8

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

1,000.46
Run Code Online (Sandbox Code Playgroud)

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

1.000,46
Run Code Online (Sandbox Code Playgroud)


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

  • 现在(+ 3年),人们可以使用[NumberFormatter](http://php.net/NumberFormatter.parse)从PHP 5.3开始使用`intl`扩展名. (3认同)