linux将字符型转为浮点型,在Windows上模拟Linux的浮点字符串转换行为

我在输出浮点数时遇到了一个恼人的问题.当我在Windows上格式化11.545,精度为2小数点时,它输出"11.55",正如我所料.但是,当我在Linux上做同样的事情时,输出是"11.54"!

我最初在Python中遇到了这个问题,但进一步的调查表明,差异在于底层的C运行时库.(该体系结构是x86的64在两种情况下.)运行C的下面的行上产生Windows和Linux的不同的结果,同样因为它在Python.

printf("%.2f", 11.545);

为了更多地了解这一点,我将数字打印到20位小数("%.20f"):

Windows: 11.54500000000000000000

Linux: 11.54499999999999992895

我知道11.545不能精确地存储为二进制数.所以似乎正在发生的事情是Linux以最佳精度输出实际存储的数字,而Windows输出最简单的十进制表示,即.试图猜测用户最有可能的意思.

我的问题是:是否有任何(合理的)方法来模拟Windows上的Linux行为?

(虽然Windows的行为当然是直观的,但在我的情况下,我实际上需要将Windows程序的输出与Linux程序的输出进行比较,而Windows是唯一可以更改的.顺便说一下,我试过查看Windows源代码printf,但执行float-> string转换的实际函数是,_cfltcvt_l并且其源代码似乎不可用.)

编辑:情节变厚!关于这种由不精确表示引起的理论可能是错误的,因为0.125确实具有精确的二进制表示,并且当输出时它仍然不同'%.2f' % 0.125:

Windows: 0.13

Linux: 0.12

但是,round(0.125, 2)在Windows和Linux上都返回0.13.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值