我正在编写一个简单的Java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double
2-string。然后,我需要对double进行简单的计算,并将结果发送到具有特定精度的输出(4)。它工作正常,但是当输入为0时出现问题,则不能正常工作。
例如,对于这些输入,输出将是:
1公斤
输出:2.2046
3.1公斤
输出:6.8343
但是当输入为0时,输出应为0.0000,但显示为0.0。我应该怎么做才能使其显示为0.0000?
我读过有关双精度的类似文章,它们建议BigDecimal
使用类之类的东西,但是在这种情况下我不能使用它们,我这样做的代码是:
line=input.nextLine();
array=line.split(" ");
value=Double.parseDouble(array[0]);
type=array[1];
value =value*2.2046;
String s = String.format("%.4f", value);
value = Double.parseDouble(s);
System.out.print(value+" kg\n");
DecimalFormat
将允许您定义要显示的位数。即使值是零,“ 0”将强制输出数字,而“#”将省略零。
System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n");
应该把戏。
请参阅说明文件
注意:如果出于性能原因经常使用,则应仅实例化格式化程序一次并存储引用:final DecimalFormat df = new DecimalFormat("#0.0000");
。然后使用df.format(value)
。
问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(
问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。
我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?
什么是“精度”?使用float和double时,单和双有什么区别?“单精度32位IEEE 754浮点”“双精度64位IEEE 754浮点”是什么意思?
问题内容: 以下值给我错误的精度。仅使用特定数字可以观察到它。这可能是一个浮动表示问题,但想知道具体原因。 正在打印的输出代替。 问题答案: 如果希望十进制数字与在Java中输入的数字完全一样,请使用BigDecimal而不是float。 浮点数对于十进制而言本质上是不准确的,因为许多以十进制结尾的数字(例如0.1)都是以二进制形式重复出现的数字,并且浮点数以二进制表示形式存储。
问题内容: 使用double时,如何使用模数运算符处理Java的怪异行为? 例如,你所期望的结果是(事实上,谷歌说,我不是要疯了),但是当我在Java中,我得到运行它。 我了解这是Java存储和处理方式加倍的结果,但是有没有解决的方法? 问题答案: 如果需要精确的结果,请使用精确的类型: 为什么是3.8000 … 003?因为Java使用FPU来计算结果。3.9不可能以IEEE双精度表示法精确存储