Java 获取存储的实际数字
我有一个项目,用泰勒级数创建一个科学计算器。此外,我正在分析ieee 754标准浮点系统的一个数字 在我的计算器中,用户选择是要单精度还是双精度:我使用浮点和双变量, 然后我分析了ieee 754规范中的数字 如果用户需要双精度,分析如下:Java 获取存储的实际数字,java,floating-point,bigdecimal,ieee-754,Java,Floating Point,Bigdecimal,Ieee 754,我有一个项目,用泰勒级数创建一个科学计算器。此外,我正在分析ieee 754标准浮点系统的一个数字 在我的计算器中,用户选择是要单精度还是双精度:我使用浮点和双变量, 然后我分析了ieee 754规范中的数字 如果用户需要双精度,分析如下: double analyze=3.45 BigDecimal bd=new BigDecimal(analyze) 这让我 3.45000000000000017763568394002504646778106689453125 这个数字是以二进制格式
double analyze=3.45
BigDecimal bd=new BigDecimal(analyze)
这让我
3.45000000000000017763568394002504646778106689453125
双重分析=0.5
BigDecimal db=新的BigBecimal(分析)
0.5
-为什么会丢失有效数字
有人能告诉我为什么会这样吗
BigDecimal one=new BigDecimal(0.1);
BigDecimal five=one.multiply(new BigDecimal(5)) ;
System.out.println("5 times 0.1 is "+" "+ five);
System.out.println("But the 0.5 in BigDecimal is " + " "+ new BigDecimal(0.5));
通过运行这个,您可以
5乘以0.1等于0.5000000000000000277555756156289135907917022705078125
但是BigDecimal中的0.5是0.5
1.我想问你这个数字是不是以二进制格式存储在pc内存中的实际数字
对
2.如果不是,我可以得到存储的数字的真实值
是的,所以没问题
0.5
是以二进制格式存储的精确数字
1.我想问你这个数字是不是以二进制格式存储在pc内存中的实际数字
对
2.如果不是,我可以得到存储的数字的真实值
是的,所以没问题
你没有
0.5
是以二进制格式存储的精确数字。一般来说,float和double将不准确地表示十进制数字(除了二的幂和一些其他“最佳点”)。该数字以二进制形式存储在内部。您可以使用Double.doubleToRawLongBits
或Float.floatorawintbits
访问内部表示法。通常,Float和Double将不准确地表示十进制数(除了二的幂和一些其他“最佳点”)。该数字以二进制形式存储在内部。您可以使用Double.doubleToRawLongBits
或Float.floatorawintbits
访问内部表示
BigDecimal one=new BigDecimal(0.1);
BigDecimal five=one.multiply(new BigDecimal(5)) ;