小数点

java浮点数存储

佐手、 提交于 2020-01-25 21:02:17
转自: 【解惑】剖析float型的内存存储和精度丢失问题 1、小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1) 十进制整数如何转化为二进制数 算法很简单。举个例子,11表示成二进制数: 11/2=5 余 1 5/2=2 余 1 2/2=1 余 0 1/2=0 余 1 0 结束 所以:11二进制表示为(从下往上):1011 这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0。换句话说,所有的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会, 整数永远可以用二进制精确表示 ,但小数就不一定了。 (2) 十进制小数如何转化为二进制数 算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数 0.9*2=1.8 取整数部分 1 0.8(1.8的小数部分)*2=1.6 取整数部分 1 0.6*2=1.2          取整数部分 1 0.2*2=0.4          取整数部分 0 0.4*2=0.8          取整数部分 0 0.8*2=1.6          取整数部分 1 0.6*2=1.2         取整数部分 0 .........     所以:0.9二进制表示为(从上往下): 11100100100100...... 注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分

Java精确计算

浪子不回头ぞ 提交于 2020-01-25 16:14:57
简介 JAVA的double型数据以及float类型的数据均不能进行精确计算,许多编程语言也是一样,这与计算机的底层原理有关。 因此计算得出的结果往往超出预期。 尤其是在金融行业,计算价格或者银行业务的钱的计算。精确计算变得尤为重要。 虽然我们可以通过四舍五入的方式来处理结果,但是这样做就意味着存在着误差。 场景分析 比如说下面这些计算,我知道结果应该是精确的数字,计算机并没有计算出我们想要的结果。 /** * @author wzm * @version 1.0.0 * @date 2020/1/25 14:24 **/ public class MathTest { public static void main(String[] args) { System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.43); System.out.println(2.03 * 10); System.out.println(3.3 / 10); } } 计算结果: 0.060000000000000005 0.5700000000000001 20.299999999999997 0.32999999999999996 BigDecimal Java中提供精确计算的类。 java.math.BigDecimal 四则运算

TPY102四位数码管1.0

别来无恙 提交于 2020-01-24 23:13:50
# main.py -- put your code here! """ 四位数码管1.0 适用于:四位七段数码管,共阳 输入num类型:字符串str 马玉华,2019.12.28 """ import pyb from pyb import Pin # 数码管a~g dp对应的开发板引脚'X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8',用于控制每一位上七个数码管加一个小数点的高低电平。 d_Pins = [Pin(i, Pin.OUT_PP) for i in ['X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8']] # 数码管位段1 2 3 4对应的引脚'Y9','Y10','Y11','Y12' , 'Y9','Y10','Y11','Y12'对应个位十位百位千位。当1234中的一个为高电平,其他的为低电平时,高电平那一位的七段数码管可以进行编辑 w_Pins = [Pin(i, Pin.OUT_PP) for i in ['Y9', 'Y10', 'Y11', 'Y12']] # 共阳数码管,每位上的七个数码管共一个阳极(1234中一个),控制的是负极的高低电平,给负极低电平点亮数码管。 # 要想亮四个数码管,就需要四位循环闪烁亮,人眼看不出来就相当于四个都亮了

文本框测试用例

江枫思渺然 提交于 2020-01-21 21:48:22
一、文本框: 在 WEB测试中,表单输入框有两种,一种是数值型文本框,一种是字符型的普通文本输入框。 普通的文本输入框 通常要检查以下几点: 1、输入中英文空格 2、输入超长字符 3、输入字符串中间含空格 4、输入首尾空格 5、输入特殊字符 6:输入全角/半角特殊字符(特别是单引号) 7、输入特殊字符串NULL,null 8、输入正常字符串 9、输入的字符串之间含空格 10:输入全角、半角空格 11:输入全角/半角,大写/小写英文字符 12:输入全角/半角数字 13:输入中文字符(默认全角) 14:输入英文字符(默认全角) 15:输入Javascrīpt函数:<b>Hello</b>,alert("hello") 16:高危词,违禁词,敏感词 17:输入日文字符(很少校验此字符) 18:输入特殊字符串NULL、null、 空格的转义字符;<scrīpt></scrīpt>;<br>;<tr>;<td>;< /tr>;</td>;</html>;</body>;</table>等 针对费用类的数值型输入框: 条件: demcial(x,y) ,界面显示小数点到y位 通常要检查以下几点: 1、输入英文空格 2、输入中文空格 3、输入字符中含有A~Z或a~z或者~!@#$%^&*()_+|\=-`{}[];’”:,./?<> 4、输入整数首位为0 5、输入整数末位为0 6、输入正数值 7

bc显示小数点前的0

☆樱花仙子☆ 提交于 2020-01-18 23:53:23
bc是强大而常用的计算工具。不过在除法运算时,如果得到的结果值小于1,得到的小数前面的0不存。本篇提供几个常用小数点前缺0的解决方法。 [root@maqing ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=2; 1/3 .33 打开bc进入交互模式,我们键入scale=2; 1/3 回车,看到结果0.33前的0没有---注意此处保留小数点人2位 scale=2不能少,少了结果为是0 。 解决方法如下: #!/bin/bash #方法1 res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`) res2=$(printf "%.2f" `echo "scale=2;5/3"|bc`) #方法2 #v=$(echo $big $small | awk '{ printf "%0.2f\n" ,$1/$2}') v1=$(echo 1 3 | awk '{ printf "%0.2f\n" ,$1/$2}') v2=$(echo 5

PAT B1024 科学计数法 (20分)

南笙酒味 提交于 2020-01-16 23:53:21
题意:首先浮点数部分必有1位小数,指数部分必为整数。其次要求保留所有有效位。 我将其拆分为2个字符串保存,左边的浮点数部分(去掉小数点)num,右边的指数部分exp。均包含符号。首先输出最前面的符号,为正不处理。n为exp的绝对值。然后根据指数的正负:若为负数,共计输出n个0。若为正数,区分为n>=valid_digit和n<valid_digit。前者无小数点,后者需要在适当的位置输出小数点。若为0,当然经过测试,测试数据中不含0指数,严谨起见还是加上,则原样输出。 //1024 科学计数法 (20分) #include <cstdio> char num[10000] = { 0 }; char exp[10000] = { 0 }; int main() { int i, j; i = j = 0; char ch; while ((ch = getchar()) != 'E') { if (ch == '.') { continue; } num[i++] = ch; } while ((ch = getchar()) != '\n') { exp[j++] = ch; } if (num[0] == '-')//最前面的符号部分 putchar('-'); int valid_digit = i - 2;//小数部分的有效位数是i-2 int n = 0; sscanf

验证输入正整数和小数点位数

六眼飞鱼酱① 提交于 2020-01-14 19:47:42
//验证输入正整数和小数点位数 @input = " e => { onInput ( 'userData' , 'age' , e , false ) ; } " /** * data 需要修改的对象 * name 需要修改的对象参数 * value 当前输入框的值 * isdecimal 是否有小数 true / false * decimalNum 小数的位数 */ onInput ( data , name , value , isdecimal , decimalNum ) { this [ data ] [ name ] = Helpers . onInput ( value , isdecimal , decimalNum ) } , static onInput ( value , isdecimal , decimalNum ) { if ( isdecimal ) { let str = '^\\d+(?:\\.\\d{0,' + decimalNum + '})?' let reg = new RegExp ( str ) value = value . toString ( ) . match ( reg ) if ( value && value [ 0 ] ) { return value [ 0 ] } else { return '' } }

Java常量/变量

不羁的心 提交于 2020-01-13 18:55:54
1. 常量 /* 常量:在程序运行期间,固定不变的量。 常量的分类: 1. 字符串常量:凡是用双引号引起来的部分,叫做字符串常量。例如:"abc"、"Hello"、"123" 2. 整数常量:直接写上的数字,没有小数点。例如:100、200、0、-250 3. 浮点数常量:直接写上的数字,有小数点。例如:2.5、-3.14、0.0 4. 字符常量:凡是用单引号引起来的单个字符,就做字符常量。例如:'A'、'b'、'9'、'中' 5. 布尔常量:只有量中取值。true、false。 6. 空常量:null。代表没有任何数据。 */ public class Demo01Const { public static void main(String[] args) { // 字符串常量 System.out.println("ABC"); System.out.println(""); // 字符串两个双引号中间的内容为空 System.out.println("XYZ"); // 整数常量 System.out.println(30); System.out.println(-500); // 浮点数常量(小数) System.out.println(3.14); System.out.println(-2.5); // 字符常量 System.out.println('A');

3. 第 3 章 表达式和交互

风格不统一 提交于 2020-01-12 00:29:55
1. 从键盘输入的字符会放在输入缓冲区,当 cin 读取时会自动转换成需要存储的类型。并在输入缓冲区中保留不能被读取的其余字符。 2. 可以用一条 cin 一句读入多个变量,这些变量也可以是不同类型的。 3. 计算数字的幂需要用到库函数 pow, 需要#include<cmath>。 4. static_cast<>用于强制类型转换 5. 使用 setw()指定显示宽度,默认右对齐,需要#include<iomanip>。setw要与值一起使用,因为打印完当前值以后,cout会回到默认的打印方式。 6. setprecision()指定的位数,是所有数字的个数,即小数点前后的数字个数。setprecision()精度设置会一直生效,直到改变这个设置。 7. 若一个数字太大,使用setprecision()设置失效时,系统会自动使用科学计数法表示,为了避免这种情况,应改用 fixed 操作符,从而使用小数点表示法表示。 8. setprecision()与 fixed 操作符连用时,用于指定小数点后要显示的位数。 9. showpoint操作符用于显示小数点,若没有指定小数点的位数,则默认显示6位。  一般这样连用: cout << fixed << showpoint << setprecision(2) ; 表示显示小数点后两位。 10. cin 遇到第一个非空字符开始读取