【问题标题】:php round number - When echo it displays 2 decimals, if print to CSV it displays .0999999php 整数 - 回显时显示 2 位小数,如果打印为 CSV,则显示 .0999999
【发布时间】:2017-03-31 12:00:14
【问题描述】:

使用http://www.maatwebsite.nl/laravel-excel/ 导出为 CSV 和 Excel。

我有一个 $rows 数组,其中包含所有行及其列。

有些列有一个使用number_format(round((float)$number, 2 ), 2, '.', '');的格式化数字,这个$number是查询结果中的一列。

如果我 var_dump $rows 每个数字的格式都很好。

当我这样做时

 Excel::create($filename, function($excel) use ($rows) {
    $excel->sheet('Sheet 1', function($sheet) use ($rows) {
        $sheet->rows($rows);
    });
})->export('csv');

它导出为 CSV(如果我选择 excel,也会发生同样的情况)并且某些列错误地显示数字,例如 82.70999999999999 而不是 82.71

找不到解决方法

【问题讨论】:

  • 你是怎么把它打印成 CSV 的?
  • 向我们展示相关代码。$number 是什么,您在哪里构建 CSV?另外,您之后如何访问 CSV?
  • 分享更多你如何为 csv 赋予价值的代码?
  • 让我猜猜$number 是。等一下,你告诉我们怎么样?
  • 我已经尝试过这样做,它正在将数据正确放入 CSV。 <?php $number = 87.6546546546546546546; $number = number_format(round((float)$number, 2 ), 2, '.', ''); echo $number; $handle = fopen("test.csv", "w"); fputcsv($handle, array($number)); fclose($handle); ?>这是你正在做的同样的事情吗?

标签: php floating-point rounding precision number-formatting


【解决方案1】:

当你格式化列时,试试这个直接的解决方案:

$number = 82.70999999999999; $float_string = sprintf("%.2f", $number); // $float_string = "82.71";

这将取代您的number_format(round((float)$number, 2 ), 2, '.', '');

希望对你有帮助~!

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多