PHPstring浮动

我不熟悉PHP,并有一个快速的问题。

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

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

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

现在,我需要显示总花费。 当我将这两个数字相乘时,它不起作用(如预期的那样,这些是string)。

但我不知道如何在PHP中parsing/转换/转换variables。

我该怎么办?

 $rootbeer = (float) $InvoicedUnits; 

应该为你做。 检查types杂耍 。 您还应该读取string转换为数字 。

你需要非locale感知的floatval函数 :

float floatval(mixed $ var) – 获取string的float值。

例:

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

那么,如果用户写入100,000,则floatvar将显示错误。 所以 –

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

这更可靠。

用法:

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

处理花车上的标记是一项不重要的任务。 在英文/美国符号中,您格式化了一千个加46 * 10-2:

 1,000.46 

但在德国,你会改变逗号和点:

 1.000,46 

这使得在多语言应用程序中很难猜出正确的数字。
我强烈build议使用Zend Framework的Zend_Measure来完成这个任务。 这个组件将用户语言parsingstring为浮点数。

使用此函数从任何种类的文本样式中input一个浮点值:

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

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