我正在尝试实现一个新的等级舍入到BigDecimal类,并且我得到了一个可能的错误,一定是我做错了什么。下面的代码暴露了我的问题:
public static void main(String[] args) throws IOException {
BigDecimal valDouble = new BigDecimal(0.35);
valDouble = valDouble.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valDouble.doubleValue()); // prints 0.3
BigDecimal valString = new BigDecimal(new String("0.35"));
valString = valString.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valString.doubleValue()); // prints 0.4
}
我的疑问是,BigDecimal对于double和String构造函数是否不同?
我不能理解这个“bug”,至少,我只是用了一个简单的字符串conat来“解决”它,如下所示:
BigDecimal valDouble = new BigDecimal("" + 0.35);
知道是什么导致了这种奇怪的行为吗?
0.35已经不精确,成为FP的二进制基数。使用新的BigDecimal(“0.35”),这是精确的,因为它是十进制基数。
你不需要猜测0.35代表什么
BigDecimal valDouble = new BigDecimal(0.35);
System.out.println(valDouble);
印刷品
0.34999999999999997779553950749686919152736663818359375
这将四舍五入到小数点后1位,即0.3
您不需要转换为字符串,可以使用valueOf
BigDecimal valDouble = BigDecimal.valueOf(0.35);
System.out.println(valDouble);
印刷品
0.35
要将二分之一四舍五入到小数点后一位,可以使用
double d = 0.35;
double d1 = Math.round(d * 10) / 10.0;
System.out.println(d1);
印刷品
0.4
这不是一个错误。0.35作为一个双字面表示一个不完全等于0.35的值;它可能类似于0.349999995之类的东西。所以它向下舍入。
字符串构造函数允许您使用“0.35”精确地指定0.35,这将四舍五入。
不要在此处使用双构造函数;当使用BigDecimal足够重要时,您需要远离浮点land。
我正在做一项关于使用结构化/半结构化/非结构化数据的作业,我正在对莎士比亚的戏剧进行字数统计(以了解语言如何随时间变化),方法是导入每部戏剧的txt文件和xml索引文件,该文件存储有关每部戏剧的关键信息,如编写年份、角色列表等。。然后,我将删除字符名、设置、标点符号和常用词(和、但、或,如果等…)从txt文件准备好进行字数统计-全部在C#中运行的控制台脚本中。我正在编写一个类,每个剧本的数据都将存
我最近了解了Java字符串池,有几件事我不太明白。 使用赋值操作符时,如果字符串池中不存在新字符串,则将在字符串池中创建新字符串。 当使用String构造函数时,我明白无论String池的状态如何,都将在堆中、String池之外创建一个新字符串。 我在某处读到过,即使在使用构造函数时,也在使用字符串池。它将把字符串插入到字符串池和堆中。 我没有找到任何关于这方面的进一步信息,但我想知道这是不是真的
问题内容: 我正在查看String API,突然我遇到了一个String空的构造方法,即我们可以使用以下方法构造一个空的String对象: 我不知道有什么用吗? 问题答案: 当然..... 将在堆创建一个非文字串对象 ,这 将是 垃圾收集。 在哪里 将创建一个String Literal 。这 将不会被 垃圾收集过,如果是通过默认加载器访问。 看到下面这个链接,我问了一个问题。这可能与您的问题没有
本文向大家介绍C#使用round函数四舍五入的方法,包括了C#使用round函数四舍五入的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用round函数四舍五入的方法。分享给大家供大家参考。具体分析如下: C#中的round函数实际上不是真正的四舍五入函数,一般的程序设计语言的round函数也都不是四舍五入函数,而是银行家舍入法函数,也就是“四舍六入五考虑,五后非零就进一,五后
问题内容: 我不明白原始是如何转换为char数组的。如果我尝试使用其他代码,则会引发编译错误。 问题答案: 有两个属性: 因为您位于的构造函数中,所以您有权访问其私有字段和。 您无法从String类的外部访问这些字段,因此,如果尝试执行此操作,将抛出编译错误。
我想在JComboBoxe中显示我的名为CodeA(类型为String)的变量中的每个项。我有一条错误消息: 我不明白和之间的转换 编辑:在此处输入图像描述