我根本不熟悉PHP并且有一个简单的问题。
我有2个变量@pricePerUnit和@invoicedUnits。以下是将这些值设置为值的代码:
$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);
如果我输出这个,我得到正确的值。让我们说5000个发票单位和1.00的价格。
现在,我需要显示花费的总金额。当我将这两者相乘时,它不起作用(正如预期的那样,这些是字符串)。
但我不知道如何在PHP中解析/转换/转换变量。
我该怎么办?
答案 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
}