我有一个使用双打的简单计算,但我得到了一个意想不到的结果,我不明白为什么?
import java.util.Scanner;
public class VersatileSnitSoft {
/**
* @param args
*/
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double amount;
System.out.print("What’s the price of a CD-ROM? ");
amount = myScanner.nextDouble();
amount = amount + 25.00;
System.out.print("We will bill $");
System.out.print(amount);
System.out.println(" to your credit card.");
}
}
如果我输入2.99,我得到的结果是。。
We will bill $27.990000000000002 to your credit card.
使用十进制格式显示整数后的2位数字
DecimalFormat f = new DecimalFormat("##.00");
String amt=f.format(amount);
System.out.print("We will bill $");
System.out.print(amt);
http://www.browxy.com/SubmittedCode/21519
double(通常是浮点值)不能总是准确地表示我们直观上认为的精确值。这是因为浮点数的存储方式不同,并且可能因机器和语言而异。当您尝试存储2.99
时,存储的实际值可能略有不同(例如2.99000000000002
)。这个问题给出了一个合理的、快速的原因概述。
因此,您应该(正如通过链接所说的)永远不要使用浮点原语来表示货币。使用BigDecimal
,或者自己跟踪两个整数(例如int-dollars;
和int-cents;
)。
在使用双精度(或浮点)运算时,无法精确表示十进制值。改用BigDecimal。
编辑(2)
示例如下:
BigDecimal amount = new BigDecimal("2.99");
amount = amount.add(new BigDecimal("25.00"));
System.out.println(amount.toString());
输出:
27.99
问题内容: 我有一个使用双打的简单计算,但是得到了意外的结果,我不明白为什么? 如果输入2.99,我得到的结果是.. 问题答案: 在双精度(或浮点数)运算时,不能精确表示十进制值。改用BigDecimal。 编辑(2) 这里的例子: 输出:
我有一个很长的表单A,内容固定,如下。 A在项目内非常多的地方使用,A1,A2,A3的内部数据独立不用同步。 但是每个使用A的地方都会因为父组件的某些事件而改动A的内部参数。 请问这种情况有无办法使formData双向绑定? 现在我的实现方法是 但是这样违背了单项数据流的原则。所以请问有更好的办法吗?
当产品(和子产品)类别页面和商店页面中的条件标记(是产品类别)同时出现时,我无法应用下面的代码。 希望有人能帮忙。 我的目标:每个产品类别页面(包括家长) 参考代码片段和代码片段
我刚启动JavaFx,有点拘泥于TableView,它显示了每个列的非常长的字符串表示,如: 而我预计细胞中只会出现“大”、“5000”、“3000”。 这是我的模型: fxml: 最后是控制器: 看起来控制器很好,它能够从数据库中获取值并向TableView添加行,但为什么TableView显示属性对象的字符串表示,而不仅仅是显示值? 非常感谢!
问题内容: 我试图在python中打印一些大的东西,而不是得到整个结果,我得到了中间带有“ …”的部分。任何想法如何获得全部? 例如 代码是: 我已经将其转换为字符串,并且在写入文件时得到了相同的结果 问题答案: 对于,请致电: 将阈值提高到无穷大。有关更多详细信息,请参见文档。 对于Python 3,请改用:
当执行下面的代码段时,它对double的行为不同。 为什么Double的行为与long不同?