双倍和浮动精度

时间:2016-04-16 07:32:53

标签: python floating-point double precision

public void generateNotification(String yourVariable) { Intent offlineIntent = new Intent(this, NotificationReceiverActivity.class); offlineIntent.setAction("Go Offline"); Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.logo); long when = System.currentTimeMillis(); Uri alarmSound = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Intent notificationIntent = new Intent(getApplicationContext(), ActivityHome.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent mainPIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); Random random = new Random(); int m = random.nextInt(9999 - 1000) + 1000; Notification noti = new Notification.Builder(this) .setContentTitle(getResources().getString(R.string.app_name)) .setContentText(alertMessage) .setSmallIcon(R.mipmap.logo) .setLargeIcon(largeIcon) .setAutoCancel(true) .setSound(alarmSound).setAutoCancel(true).setWhen(when) .setContentIntent(mainPIntent) .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000}) .build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); noti.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(m, noti); }

a = 2.3

b = a*100

输出:print b

230.0

输出:print 2.3*100

Double和Float乘法似乎有所不同。是吗?

上述行为的解释是什么?

3 个答案:

答案 0 :(得分:2)

首先,Python只有浮点数的单一类型,即float;没有双重类型。

现在,我不确定原因,但您的问题似乎归结为使用print

>>> 2.3*100
229.99999999999997
>>> print 2.3*100
230.0

那是Python 2.7.10。有趣的是,这不会发生在3.5.1:

>>> 2.3*100
229.99999999999997
>>> print(2.3*100)
229.99999999999997

答案 1 :(得分:0)

我假设您使用旧的python 2,因为您的print语句。当我运行代码时,我会得到相同的结果,对于print个语句:

Python 2.7.10 (default, Jul 14 2015, 19:46:27) 
>>> a = 2.3
>>> b = a*100
>>> print b
230.0
>>> print 2.3*100
230.0

我怀疑你正在使用交互式python。这是从浮点到字符串的转换功能:

Python 2.7.10 (default, Jul 14 2015, 19:46:27) 
>>> 2.3*100
229.99999999999997
>>> print 2.3*100
230.0
>>> str(2.3*100)
'230.0'
>>> repr(2.3*100)
'229.99999999999997'

这说明了str使用的print与交互式python使用的repr之间的区别。

答案 2 :(得分:-1)

快速谷歌搜索给了我this.

基本上,浮点数以位(0-1)表示,类似于我们知道的数字用0-9表示的方式。很多数字都不能用这种方式准确表示,类似于我们无法准确表示十进制的1/3(常规0-9)。