gpt4 book ai didi

php - 将货币格式的字符串转换为 float

转载 作者:可可西里 更新时间:2023-11-01 01:08:22 27 4
gpt4 key购买 nike

我必须读取一个相当大的文件,其中包含以不同方式格式化的数字。

我试过使用内置的 floatval()功能。此函数适用于某些数字,例如 22000.76,但不适用于 22000,76

阅读 php.net 上的评论对我帮助很大,我发现了这个 parseFloat 函数:

<?php 
function parseFloat($ptString) {
if (strlen($ptString) == 0) {
return false;
}

$pString = str_replace(" ", "", $ptString);

if (substr_count($pString, ",") > 1)
$pString = str_replace(",", "", $pString);

if (substr_count($pString, ".") > 1)
$pString = str_replace(".", "", $pString);

$pregResult = array();

$commaset = strpos($pString,',');
if ($commaset === false) {$commaset = -1;}

$pointset = strpos($pString,'.');
if ($pointset === false) {$pointset = -1;}

$pregResultA = array();
$pregResultB = array();

if ($pointset < $commaset) {
preg_match('#(([-]?[0-9]+(\.[0-9])?)+(,[0-9]+)?)#', $pString, $pregResultA);
}
preg_match('#(([-]?[0-9]+(,[0-9])?)+(\.[0-9]+)?)#', $pString, $pregResultB);
if ((isset($pregResultA[0]) && (!isset($pregResultB[0])
|| strstr($preResultA[0],$pregResultB[0]) == 0
|| !$pointset))) {
$numberString = $pregResultA[0];
$numberString = str_replace('.','',$numberString);
$numberString = str_replace(',','.',$numberString);
}
elseif (isset($pregResultB[0]) && (!isset($pregResultA[0])
|| strstr($pregResultB[0],$preResultA[0]) == 0
|| !$commaset)) {
$numberString = $pregResultB[0];
$numberString = str_replace(',','',$numberString);
}
else {
return false;
}
$result = (float)$numberString;
return $result;
}
?>

它几乎适用于我列表中的所有数字。由于我使用 DKK 作为货币,一些数字的格式如下:Kr。 100.00。这个问题,我解决了只是将这些行放在 parseFloat 函数的顶部。

$prefix = substr($ptString, 0, 4); 
if ($prefix == "kr. " || $prefix == "Kr. ")
$ptString = substr($ptString,4);

$prefix = substr($ptString, 0, 3);
if ($prefix == "Kr." || $prefix == "kr.")
$ptString = substr($ptString,3);

现在我的问题只发生在数字上,格式如下 12.123.00,应该是 12123.00

认为这可以用正则表达式解决(不是我的强项)。

基本上,我要求将 xx.xxx.dd 转换为 xxxxx.dd。

不要考虑舍入问题。

最佳答案

NumberFormatter有一个可能有用的 parseCurrency() 方法。

关于php - 将货币格式的字符串转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com