【问题标题】:javascript/php rounding [closed]javascript/php 舍入 [关闭]
【发布时间】:2020-03-20 13:40:35
【问题描述】:

我的产品价格为 1.83,税率为 9% -->0.1647。总价应为 2.00。 我希望该值带有 2 位小数,四舍五入为 0.17。我试过了

(ceil(($item['price'] * $tax['percent'] / 100)*100)/100) 

它只适用于这个价格,但使用相同的方法,产品价格为 3.67,含税 9% -->0.3303 变为 0.34。总共是 4.01,我需要这个是 4。

有什么建议吗?

【问题讨论】:

  • 似乎您的限制不明确。为什么 1.9947 应该向上取整为 2.00 而不是 1.99?

标签: javascript php rounding


【解决方案1】:

尝试使用round() 对加上最终计算税的价格。

php > $price = 1.83; $tax = 9; echo round($price + ceil(($price * $tax / 100)*100)/100);
2
php > $price = 3.67; $tax = 9; echo round($price + ceil(($price * $tax / 100)*100)/100);
4

编辑

php > $price = 1.83; $tax = 9; $final = round($price + ceil(($price * $tax / 100)*100)/100);
php > echo "Price: $price, Tax:" . ($final - $price);
Price: 1.83, Tax:0.17

php > $price = 3.67; $tax = 9; $final = round($price + ceil(($price * $tax / 100)*100)/100);
php > echo "Price: $price, Tax:" . ($final - $price);
Price: 3.67, Tax:0.33

【讨论】:

  • 谢谢,但这行不通。我需要价格和增值税的各个值,在它们更正之后,因为我将它们保存在数据库中,而不是总数。因此,当我添加它们时,它们应该是正确的,无需额外四舍五入!例如在第一个示例中,我将保存 1.83 作为价格和增值税 0.17(从 0.16 更正)在第二个 3.67 价格上,增值税更正为 0.33 而不是 0.34
  • @ChrysostomosPogiatzis 再次嗨,我已经编辑了我的答案,现在完全按照您的描述进行。价格和修正后的税金现在是单独的值。
  • 这里给出的答案是否正确取决于@Jon 提供的更清晰的信息。 ceil (ceiling) 表示一个浮点值,会将 1.9947 的数字四舍五入为 2,但是逻辑上说这个值不正确并且可能返回不需要的值,如果这是 Jon 要求的,那么这是 100% 正确的,因此我赞成。跨度>
  • @AndreOosthuizen 我用ceil()是因为我不想改变他原来的算法,除非有什么问题?
  • @Jon.Frenchtoast 我喜欢你的方法,但我认为它不能解决问题。 round 应该有 2 位小数。您使用 NONE,所以它正确地四舍五入为 2 或 4……价格为 1.51 会发生什么?它会变成 2
【解决方案2】:

以下内容将为您提供所需的正确税款。如果您期望超过 4 个小数,那么您可能需要使 .toFixed() 递归。

JaveScript

(+((($item['price'] * $tax['percent'] / 100)).toFixed(3)).toFixed(2)

PHP

number_format(number_format($item['price'] * $tax['percent']/100, 3, '.', ""), 2, '.', "")

round(round(($item['price'] * $tax['percent']/100), 3), 2)

【讨论】:

    【解决方案3】:

    您可以使用 number_format 并指定小数,如 -

    $sum = 1234.9874   
    $total = "number_format($sum, 2, '.', '');
    

    2 是小数点,您可以更改为任意多个小数点。点是美分分隔符,也可以改为逗号。

    您可以在数字格式构造函数上Read More Here

    希望这会有所帮助。

    【讨论】:

    • 你好安德烈。您的回答与主题无关,而不是问题所暗示的。问题与在没有 -+1 美分的情况下四舍五入要匹配的总和和单个值有关
    • @Angelos,我不同意,因为数字格式也根据我对 PHP 文档的链接正确地舍入数字 - “它没有明确记录;number_format 也舍入:”并给出了示例。我对此进行了测试,并且舍入正确完成。 OP 要求对数字进行四舍五入和 2 个十进制值,该数字格式一次性给出。
    • 我同意 Jay 的评论,即数字 1.9947 不能四舍五入为 2.00,因为值 4 尚不构成四舍五入,仅从 5 即 1.9957 将四舍五入为 2.00其中 1.9947 将四舍五入为 1.99
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多