我知道这个问题以前可能已经回答过。但我仍然无法解决。
我的数据来自CSV文件,该数据看起来像这样1,32但我在变量$getdata
中也有一些文本,其中一半是VARCHAR,另一半是DECIMAL。
但是当我查看自己的网站时,数据就像这样1.00
所以我的问题是如何更改小数点分隔符。
数据位于代码段底部的$getdata
变量中
if (isset($_POST['btn-upload'])){
copy("$sourcepath/$latest_filename","$copy/$latest_filename");
// Here i split the csv file, from second line. and using the first and fourth lines as the headers.
if (($openfile = fopen("$copy/$latest_filename", "r")) !== false) {
$header1 = fgetcsv($openfile, 1000, ";"); // consume, but don't use
$csv->createPalleTable($latest_filename);
$csv->insertPalleTable($latest_filename, array_map("utf8_encode", fgetcsv($openfile, 1000, ";")));
$delimiting_row = fgetcsv($openfile, 1000, ";"); // consume, but don't use
$header2 = fgetcsv($openfile, 1000, ";"); // consume, but don't use
$csv->createCsvTable($latest_filename);
while ($getdata = fgetcsv($openfile, 1000, ";")) {
$csv->insertCsvTable($latest_filename, array_map("utf8_encode", $getdata));
}
}
}
我还没有上传完整的代码,因为那将是很多代码的方式。我很确定问题出在代码片段的底部。如果您需要有关代码的任何信息,我将很乐意回答。
答案 0 :(得分:1)
尝试使用number format和简单的str_replace来替换逗号,以便可以解析浮点数。
number_format(floatval(str_replace(',', '.', str_replace('.', '', $your_number_here))), '.', '', 2)
如果要使用单独的可读功能而不是单行代码:
function convert_decimal($your_number_here, $decimal_places = 2)
{
$without_thousands_dots = str_replace('.', '', $your_number_here);
$replace_comma_for_dot = str_replace(',', '.', $without_thousands_dots);
$float_number = floatval($replace_comma_for_dot);
return number_format($float_number, '.', '', $decimal_places)
}
如果不想使用舍入或将数字用作实际数字,则可以跳过floatval部分,而只需保留它以返回$ replace_comma_for_dot变量即可。
作为参考,如何将十进制数字解析为浮点数,以便可以使用数字格式: