在JavaScript中,大家都知道著名的计算:0.1+0.2=0.3000000000000004
。但是为什么JavaScript打印这个值,而不是打印更精确、更精确的0.3000000000000000044408920985006
呢?
将number
值转换为十进制数字时,JavaScript的默认规则是使用足够的数字来区分number
值。(您可以使用toprecision
方法请求更多或更少的数字。)
JavaScript使用IEEE-754基本64位二进制浮点作为其number
类型。使用IEEE-754,.1+.2
的结果正好是0.30000000000000000444089209850062616169452667236328125。这是由于:
数字
类型中可表示的最接近的值。数字
类型中可表示的最接近的值。数字
类型中可表示的最接近的值。在设置此number
值的格式以供显示时,“0.300000000000000004”的有效数字刚好足以唯一区分该值。要了解这一点,请注意相邻值为:
0.30000000000000000444089209850062616169452667236328125
,以及如果转换为十进制数字只产生“0.3000000000000000000”,则它将更接近于0.29999999999999999999888997769753748434595763683319091796875而不是0.30000000000000000444089209850062616169452667236328125。因此,需要另一个数字。当我们有这个数字“0.300000000000000004”时,结果更接近于0.30000000000000000444089209850062616169452667236328125。因此,“0.3000000000000000004”是最短的十进制数字(忽略前导的“0”,该数字出于美观目的而存在),它唯一地区分了原始值是哪个可能的number
值。
此规则来自ECMAScript 2017html" target="_blank">语言规范第7.1.12.1条中的步骤5,该步骤是将number
值m转换为用于toString
操作的十进制数字的步骤之一:
否则,设n、k和s为整数,使得k≥1,10k-1≤s<10k,则s×10n-k的数值为m,k尽可能小。
这里的措辞有点不准确。我花了一段时间才弄明白,“s×10n-k的数字值”是指将数学值s×10n-k转换为Number
类型(使用通常的舍入)的结果的数字
值。在这个描述中,k是将要使用的有效位数,这个步骤告诉我们最小化k,所以它说要使用最小的位数,这样我们生成的数字将在转换回number
类型时生成原始数字m。
问题内容: 我正在尝试设置python 库,以便将包含其他字典作为元素的字典保存到文件中。浮点数很多,我想将位数限制为例如。 根据其他帖子,应使用SO 。但是,它不起作用。 例如,下面的代码在Python3.7.1中运行,将打印所有数字: 我该如何解决? 可能无关紧要,但我在macOS上。 编辑 该问题被标记为重复。但是,在原始帖子的已接受答案(到目前为止是唯一的答案)中明确指出: 注意:此解决方
问题内容: 我有一个类型的变量,我需要以不超过3个小数的精度打印它,但是它不应该有任何结尾的零… 例如。我需要 我尝试使用,我做错了吗? 谢谢。:) 问题答案: 尝试使用模式代替: 输出:
问题内容: 我的python脚本中有一个数字,希望用作matplotlib中图形标题的一部分。是否有将浮点数转换为格式化的TeX字符串的函数? 基本上, 退货 但是我想要 或至少让matplotlib格式化浮点格式,就像格式化第二个字符串一样。我也一直使用python 2.4,因此特别喜欢在旧版本中运行的代码。 问题答案: 您可以执行以下操作: 在旧样式中:
问题内容: 如何按照以下要求将浮点数格式化为固定宽度: 如果n <1前导零 添加尾随的十进制零以填充固定宽度 截断超出固定宽度的十进制数字 对齐所有小数点 例如: 输出会像 问题答案: 版画 花括号内的格式说明符遵循Python格式字符串语法。具体来说,在这种情况下,它由以下部分组成: 该空字符串冒号前的手段“采取下一个提供参数 -在这种情况下,作为唯一的参数。 在冒号之后的部分是格式规范。 的f
本文向大家介绍如何在Python中将浮点数格式化为固定宽度?,包括了如何在Python中将浮点数格式化为固定宽度?的使用技巧和注意事项,需要的朋友参考一下 您可以使用字符串格式在Python中将浮点数格式设置为固定宽度。例如,如果您希望小数点与小数点右边的12个字符和4位数字的宽度对齐,则可以使用以下命令: 您还可以使用字符串插值和格式化来实现此结果。例如:
程序是这样的。它的意思是根据工作时数、时薪、扣缴税款等来计算员工的净工资。它计算正确,但双点精度格式将最后一个小数四舍五入,失去了计算的准确性。 示例输入: } 请怜悯;我是一年级学生。