我遇到的情况是,我正在解析的CSV中的所有记录都是货币,但这些值不是用小数点分隔的。例如,值'1234'实际上是'12 .34','12345'是'123.45'。
我很难找到一种手动将这些值转换为小数的方法。我不能使用number_format,因为它会给我一个这样的输出:
$original_num = 1234;
$formatted_num = number_format($original_num, '2', '.', '');
$formatted_num = 1234.00; //Output
另一个问题是,在我合并两个数字之后,有时候我可能会得到像'436257.5'这样的值,实际上是'436.2575',所以我不能手动推入'。'从字符串末尾开始的两个地方。在解析文件时,我应该考虑对它进行不同的格式化吗?
答案 0 :(得分:1)
假设你使用整数总是表示小数点后2位精度的小数,你只需要用100除以在正确的位置插入点。
你是什么意思,“结合”?你的意思是乘?你应该在每次乘法后重新算术,并且永远不要进入你表示不同精度的小数的情况(除非你跟踪精度,你可以做但是它很痛苦,通常是不必要的)。
function multiply($a, $b) {
return round($a * $b / 100);
}
function format($a) {
return sprintf("%.2f", $a / 100);
}
答案 1 :(得分:1)
由于number_format()函数总是以小数形式添加2 00,因此可以将值除以100.
number_format($ original_num / 100,2);