1

我有一种情况,我正在解析的 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”,所以我不能手动输入“。” 距离字符串末尾的两个位置。我在解析文件时是否应该考虑以不同的方式格式化它?

4

2 回答 2

3

假设您使用整数始终表示小数点后两位精度的小数,您只需除以 100 即可将点插入正确的位置。

你是什​​么意思,“结合”?你是说乘法?您应该在每次乘法后重新规范化,并且永远不要遇到您表示不同精度的小数的情况(除非您跟踪精度,您可以这样做,但这很麻烦,通常是不必要的)。

function multiply($a, $b) {
  return round($a * $b / 100);
}

function format($a) {
  return sprintf("%.2f", $a / 100);
}
于 2012-06-16T12:48:56.480 回答
1

由于 number_format() 函数总是将 2 00 添加为十进制,因此您可以将该值除以 100。

number_format($original_num/100,2);

于 2015-10-26T13:13:09.530 回答