【发布时间】:2020-10-30 03:39:04
【问题描述】:
我在 stackoverflow 上找不到任何询问或回答此问题的帖子。
正常的舍入方法将“浮点数”作为一个整体进行舍入(即它的小数部分和整数部分都在舍入过程中进行处理和影响)。 p>
所以,通常情况下(四舍五入):
12.9768 Rounded to 3 decimal places is 12.977
Rounded to 2 decimal places is 12.98
Rounded to 1 decimal place is 13.0 <== Whole part also changed
Rounded to 0 decimal place is 13 <== Whole part also changed
在上面的例子中,一旦小数部分达到整数,整个部分也会受到影响。
这对于几乎所有情况都很好,也很方便,当然这也是任何标准数字舍入方法的目的。
但是,我正在寻找的是仅对数字的小数部分(到指定的位数)进行四舍五入(使用javascript),但不影响整个部分number,所以(上面的例子会变成):
12.9768 Rounded to 3 decimal places is 12.977
Rounded to 2 decimal places is 12.98
Rounded to 1 decimal place is 12.9
Rounded to 0 decimal place is 12
Rounded to 7 decimal places is 12.9768000
在上面,小数部分将四舍五入到任何所需的小数位但不会触及数字的整个部分。
尾随零是必需的,因此输出格式将为字符串类型。
此过程将舍入限制为浮点数的小数部分,并带有限制上限/限制,因为舍入不会扩展到整个部分;即最大分数将始终为 0.999 等。
使用这种方法的一种情况是,在商店中,价格标签需要显示为 USD NN.mm,但无论会计系统在计算过程中做什么,它都无法创建一个整数。因此,如果原始购买价格为 22.45 美元,并且由于任何计算而进行的四舍五入一定不会导致 22 美元变为 23。因此,它可以是 22.99 以内的任何值。这是一个小数部分为 2 位小数(即美分)的示例,但如果小数部分不是 2,则需要一个通用且灵活的解决方案来仅舍入小数部分而不触及整个部分。
谢谢。
【问题讨论】:
标签: javascript floating-point numbers rounding precision