草庐IT

Bigdecimal

全部标签

java - 我应该如何在 JavaDB 中存储 Java 枚举?

我应该如何在JavaDB中存储Java枚举?我是否应该尝试将枚举映射到SMALLINT并仅将值保留在源代码中?嵌入式数据库仅供单个应用程序使用。或者我应该将值存储为DECIMAL?这些解决方案都不适合我。有没有更好的选择?这是我的枚举:importjava.math.BigDecimal;publicenumVat{NORMAL(newBigDecimal("0.25")),FOOD(newBigDecimal("0.12")),BOOKS(newBigDecimal("0.06")),NONE(newBigDecimal("0.00"));privatefinalBigDecimal

java - Java中计算的正确数据类型是什么

在Java中我们应该使用double还是BigDecimal进行计算?与double相比,BigDecimal在性能方面的开销是多少? 最佳答案 对于严肃的财务应用程序,BigDecimal是必须的。取决于您需要多少位数,您可以使用长因子和小数因子进行可视化。 关于java-Java中计算的正确数据类型是什么,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2956659/

java - 你能让一个 TextField<BigDecimal> 同时接受 , 和 .作为小数分隔符?

在Wicket应用程序中,我有一个十进制数字文本字段:TextFieldf=newTextField("f",newPropertyModel(model,"share"));我希望它始终接受两者。(点)和,(逗号)作为小数点分隔符(不管浏览器的区域设置)。为了显示值,使用了session的语言环境[在我们的例子中它被强制为“fi”(->逗号)],但在这里我感兴趣的是字段接受作为输入。我的问题是,我是否必须将字段更改为TextField,并手动转换为域对象的类型(BigDecimal)?或者有什么方法可以使用TextField(这允许例如使用Wicket的MinimumValidato

java - 格式化字符串以删除科学记数法 - Java

我有以下代码,它拆分一串数字(用空格分隔),然后创建一个float数组://Splitthestringandthenbuildafloatarraywiththevalues.String[]tabOfFloatString=value.split("");intlength=tabOfFloatString.length;System.out.println("Lengthoffloatstringis"+length);float[]floatsArray=newfloat[length];for(intl=0;l问题在于字符串中的某些值使用科学记数法进行了格式化-例如,它们显示

java - BigDecimal 1.0E+8/100000000 ROUND_HALF_UP 为 0

谁能解释一下为什么第一行的结果是0?System.out.println((newBigDecimal("1.0E+8")).divide(newBigDecimal(100000000),BigDecimal.ROUND_HALF_UP));System.out.println((newBigDecimal("1.0E+8")).subtract(BigDecimal.ONE).divide(newBigDecimal(100000000),BigDecimal.ROUND_HALF_UP));0E+71 最佳答案 这一切都与所涉

Java 8 在一次迭代中求和两个对象属性

我有一个ListledgerEntries我需要计算creditAmount和debitAmount的总和。classLedgerEntry{privateBigDecimalcreditAmount;privateBigDecimaldebitAmount;//gettersandsetters}我已经实现了这个,BigDecimalcreditTotal=ledgeredEntries.stream().map(p->p.getCreditAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);BigDecimaldebitTotal=l

java - Clojure 中的默认十进制文字不是 BigDecimal 类型有什么原因吗?

我了解到Clojure阅读器将带后缀“M”的十进制文字(如1.23M)解释为BigDecimal。而且我还知道没有“M”的十进制数字会变成Javadouble。但我认为普通十进制数是BigDecimal会更好,并且依赖于主机的十进制数有后缀,比如1.23H。因此,当数字由于IEEEdouble的精度限制而损坏或被截断时,我们可以很容易地注意到该数字是有精度限制的。另外,我认为更简单的表达应该是独立于主机的。除了时间性能之外,Clojure将文字十进制解释为Javadouble有什么原因吗?另外,我不认为时间性能是一个答案,因为它不是C/C++,并且可以像“1.23H”一样实现声明依赖于

java - 如何在 Java 中将 0.xxxx 更改为 xxxx

如上所述。我举一个例子,假设所有的测试值都小于1但大于0。0.12(精度:3,小数位数:2)0.345(精度:4,小数位数:3)0.6789(精度:5,小数位数:4)如何在不对比例和精度值进行硬编码的情况下转换这些值。0.12->120.345->3450.6789->6789对于0.1和0.01以及0.001应该得到1(我知道这是个坏主意但我已经得到了软件的业务规则集)我更喜欢Java中的解决方案,但如果有数学算法,那就更好了。谢谢。 最佳答案 解决方案比这里介绍的任何人都简单得多。你应该使用BigDecimal:BigDecim

java - 在 BigDecimal 中提取数字小数

如何使用BigDecimal提取小数点后的数字?BigDecimald=BigDecimal.valueOf(1548.5649);结果:仅提取:5649 最佳答案 尝试:BigDecimald=BigDecimal.valueOf(1548.5649);BigDecimalresult=d.subtract(d.setScale(0,RoundingMode.FLOOR)).movePointRight(d.scale());System.out.println(result);打印:5649

java - 为什么当我使用 BigDecimal 时我的操作不起作用?

我正在尝试使用BigDecimal执行操作,但它总是返回0。为什么当我使用double时它会起作用?publicstaticvoidmain(String[]args){doublea=3376.88;BigDecimalb=newBigDecimal(a);System.out.println(a-a/1.05);System.out.println(b.subtract(b).divide(newBigDecimal(1.05)).doubleValue());}谢谢。 最佳答案 您没有执行相同的操作。当您进行双重操作时,应用正