首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理货币价值时,将一个数字除以100是否安全?

处理货币价值时,将一个数字除以100是否安全?
EN

Stack Overflow用户
提问于 2019-03-13 01:34:38
回答 1查看 1.8K关注 0票数 10

在存储库代码中,在另一个团队开发的模块中,我发现有一个价格从美分到欧元的转换,只需将数字除以100。

代码是用Javascript编写的,所以它使用IEEE 754标准。

我知道以浮点数的形式处理货币值是不安全的,但在将任务发送给另一个团队之前,我想知道这种情况是否安全。

到目前为止,我还没有发现整数除以100会得到不准确的结果的任何情况。让我们更进一步:100就是2*2*5*5

我们知道用2除以一个数字是安全的,因为它正好等于一个位置的移位。

所以我们可以很容易地说,如果存在一个不能被5精确整除的数字,那么除以100是不准确的。

我做了很多测试,都没有找到这些数字,但我还远不能从理论上证明这篇论文。

那么,在IEEE754标准中,将一个数字除以100是安全的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-03-13 05:56:11

精度为15位有效数字的浮点十进制数将转换为64位二进制浮点数(JavaScript中的Number),然后再转换回十进制数,而不会损失精度。请注意,虽然二进制数可能不能准确地存储十进制数,但它有更多的精度位(表示它至少需要17位十进制有效数字),并精确地四舍五入地转换回原始十进制数。有关详细信息,请参阅see https://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/

除以100时,二进制结果仍具有64位精度,但可能存在以最小精度(尾数的最低位)为单位的误差,除非结果下溢为0(有关详细信息,请参见What Every Computer Scientist Should Know About Floating-Point Arithmetic )。它仍然可以四舍五入到15个有效小数位内的正确数字。

换句话说,如果十进制数的有效位数不超过15位,那么除以100可以保持该精度。

例如,在浏览器控制台中尝试123456789012345 / 1000.000123456789012345 / 100 (这两个数字都有15位有效小数位精度)-这些除法返回15位有效小数位内的正确小数:

代码语言:javascript
复制
123456789012345 / 100
1234567890123.45

0.000123456789012345 / 100
0.00000123456789012345
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55127530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档