从字符串中解析货币

Ben*_*ard 7 php string parsing currency

我想用PHP中的字符串解析货币,我已经看过数字格式化程序,但没有得到PHP 5.3或者能够添加扩展名.

货币只会在每个字符串中存在一次,并且会以货币符号为前缀,在我的例子中是英镑符号£.货币可能采用以下格式之一:

£0.90
£100
£100.10
£1000
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

编辑

这是一个示例字符串:

Paid a bill £153.93
Run Code Online (Sandbox Code Playgroud)

我想将货币值变为变量.

Ale*_*rge 9

(float)substr($input, strpos($input, "£")+1);
Run Code Online (Sandbox Code Playgroud)

这将得到以下结果:

float(0.9)
float(100)
float(100.1)
float(1000)
float(153.93)
Run Code Online (Sandbox Code Playgroud)

编辑:更新以反映对问题的更改.这假设所有字符串都与您给出的字符串相似.

  • 另外,一个建议,如果他将要处理或存储货币价值,他应该将它们作为整数使用/存储,当然乘以100并将其转换为int(以防万一),基本上以便士的数量工作(或者基本单位是英国货币,便士?),然后将它们转换成浮动数,以磅为单位显示,以避免浮动计算的潜在不准确性. (2认同)

cmp*_*shn 7

我有另一个答案.触摸速度可能比使用strpos更快,如果输入中有任何空白区域可能会更好.

$input = "£250.75";
$output = floatval(ltrim($input,"£"));
echo $output;
250.75
Run Code Online (Sandbox Code Playgroud)

您还可以在ltrim中将其他货币添加到char列表中:

$output = floatval(ltrim($input,"£$¢"));
Run Code Online (Sandbox Code Playgroud)

这将从您的数字的左侧剥离$或£或¢,以及空格,这将破坏使用strpos的上方的解决方案.此外,如果在某些情况下取消货币符号,则会产生相同的结果.