浮点数!乘100、10后精度变化!

先贴一个网址,感觉写的很详细,似乎原理都分析了,但没怎么看,好像没说怎么解决...

http://justjavac.iteye.com/blog/1864938

现象:

0.56*100 // 56.00000000000001
0.56*10 // 5.6000000000000005
0.57*10 // 5.699999999999999
5.6/10 // 0.5599999999999999

包括ie6的所有浏览器都是如此

出现场景

需要把0.56 显示为 56% ,然后居然是56.00000000000001% ,无语了

解决:

似乎正常了:

0.57*1000/10

但这种情况问题依旧:

0.5757*1000/10 // 57.57000000000001

原因是:

575.7/10 // 原因是5.7除了10

发现规律:避免0.56、5.6附近的一位或两位小数对 100或者10进行 乘除

所以:先乘比小数多一位的倍数,再除去多余倍数

0.5757*100000/1000 //正常

但这种方案,没有依靠原理,凭了大部分直觉,所以,上硬招:

先转字符串,再移动小数点。但这种方案效率要低些...

function toPercent(num) {
    var arr = (num + ‘‘).split(‘.‘),
        otherHalf = (arr[1] ? arr[1] : ‘‘) + ‘000‘;
    otherHalf = otherHalf.substr(0, 2) + ‘.‘ + otherHalf.substr(2);

    return (arr[0] + otherHalf) * 1;
}
toPercent(.57) // 57
toPercent(5.7) // 570
toPercent(57) // 5700
时间: 2024-10-07 21:12:19

浮点数!乘100、10后精度变化!的相关文章

用Java计算某个日期100天后的日期

用Java计算日期时间,首先考虑到时间类,Java中提供的和时间日期相关的类里,有一个Calendar类,可以获取某个时间日期. 计算某个日期100天后的日期,思路如下: 1.先设定时间,例如2017年1月1日: 2.在给定日期的天数上增加100: 具体代码如下: 1 /* 2 * 1.先给定一个时间,例如2017年1月1日 3 */ 4 Calendar cld = Calendar.getInstance(); 5 cld.set(Calendar.YEAR, 2017); 6 cld.se

Kafka_2.10-0.10.0.0集群安装与配置

kafka_2.10-0.10 集群安装 上文已经讲过如何安装Zookeeper集群,因为Kafka集群需要依赖Zookeeper服务,虽然Kafka有内置Zookeeper,但是还是建议独立安装Zookeeper集群服务,此处不再赘述 kafka集群还是安装在192.168.20.178  . 192.168.20.179  .192.168.20.174三台机器上面 zookeeper集群 192.168.20.178 kafka1192.168.20.179 kafka2192.168.2

安装Windows 10后PDF补丁丁界面变得模糊的解决办法

对于使用高分辨率屏幕且屏幕缩放比例在 100%以上的用户,升级到 Windows 10 后将发现许多程序的界面,例如QQ.电脑管家.Windows本身的服务管理程序等等,都变得非常模糊,<PDF补丁丁>.<汉文博士>也不能幸免. 国外有一位大师开发了一个程序可解决这个问题,请到这里下载,并按照该页面提示的方式操作,点击 Apply 按钮,然后重启计算机: http://xpexplorer.com/windows10_dpi_blurry_fix/

代码:计算100天后是星期几

/* *今天是星期二,100天后是星期几 ? */ int c=2+100%7; switch(c) { default: System.out.println("100天后是星期日."); case 1: System.out.println("100天后是星期一."); break; case 2: System.out.println("100天后是星期二."); break; case 3: System.out.println(&quo

求当前时间100天后的时间日期,格式化为xxxx年xx月xx日

package com.demo1; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Demo9 { public static void main(String[] args) { Date date=new Date(); System.out.println(getDate(date,100)); } public static String

安装完Ubuntu 17.10后要做的几件事

前几天Ubuntu 17.10终于出来了,正好前几天我电脑重装系统,顺便留了一个分区用来装Linux.所以就在我电脑上安装了Ubuntu 17.10. 安装过程就不说了,图形化安装程序,基本安装过几次就熟悉了.所以重点 还是安装完成之后的美化过程. 其实说起来,ArchLinux.Fedora等等Linux系统我都折腾过很多了,但是最后还是选择了Ubuntu.因为Ubuntu以及Debian系还是目前Linux中的大头,各种软件基本上都官方支持.如果用ArchLinux这些比较小众的话,很多东西

关于numpy中的函数return中加入字符串类型数据后,小数点精度变化

weekdays.pyimport numpy as npfrom datetime import datetimedef datestr2num(s): return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday() dates, open, high, low, close=np.loadtxt('data.csv', dtype=float, delimiter=',', usecols=(1, 3

java下double乘以100后精度丢失问题

比如 System.out.println(0.14*100); 输出: 14.000000000000002 解决方法: BigDecimal b = new BigDecimal(String.valueOf(0.14)); BigDecimal c = new BigDecimal(String.valueOf(100)); System.out.println(b.multiply(c)); System.out.println(b.multiply(c).intValue()); Sy

检测日志文件的md5值如果N分钟后无变化则重启应用

计划任务添加如下: 每隔10分钟检测一次 */10 * * * * /bin/bash /data/scripts/check_md5sum.sh  /data/log/policy-root-new-4/policy-root-new-4.$(date +%Y-%m-%d).log    300   policy-root-new-4   policy-root-new-4  '/data/www/apps/policy-root-new-4/bin/boxrun'  restart chec