Tag:

Java:如何计算代表金钱的double值中包含的小数位数?

对于使用Java制作的更改应用程序,我在计算double值中的小数位数时遇到问题。 double值表示money,因此我的所有操作都必须在对原始值进行操作后将12.58之类的双值存储为12.5797886。 为了抵消这种影响,我选择使用String,就像这样: String amountString = String.valueOf(amount); String decimals = amountString.substring(amountString.indexOf(‘.’) + 1); 所以,如果金额是12.58,我获得58而不是57978 …… 我的问题涉及大量,就像12849561476651.2501535这样的金额在科学记数法中转换,同时存储在一个双。 所以金额的双倍值将是1.284956147665125E13 不幸的是,我不能只计算点后的数字,并在位置13之后取一切。在这样的情况下,原始小数2501535在第三个位置包含0,位置13之后的结果四舍五入到25。 我找到了一些解决方案,对于想要在没有科学记数法的情况下打印小数值的人,他们使用.printf(%f,…)或类似的东西。 但是,如果可能的话,我如何计算双值中包含的小数位数并处理存储问题和科学记数法? 我必须能够知道是否有超过2个小数。 此外,如果你有一个非常高性能的解决方案,即使它是一个复杂或奇怪的解决方案,它会很棒。 谢谢

Java 6 – 创建并检测Float.MAX_VALUE之上的第一个Double值

我想创建Double其值最接近但大于Float.MAX_VALUE 。 我刚刚写了一个与此类似的问题但是对于Double和Long.MAX_VALUE ,请看这里 。 如何使用标准Java 6 API重复Double和Float.MAX_VALUE的转换? 我的尝试在下面,但似乎不正确: Long longValue = Long.valueOf(Float.floatToIntBits(Float.MAX_VALUE)); Double value = Double.longBitsToDouble(Double.doubleToLongBits(longValue)+1); if (value Float.MAX_VALUE) { // Code here should execute but does not. } 真诚的谢谢。

有没有更好的方法将Double转换为精确的十进制字符串?

我尝试了很多方法使用String.format()和DecimalFormater将Double转换为精确的十进制字符串,到目前为止我发现了这个: String s = “-.0000000000000017763568394002505”; Double d = Double.parseDouble(s) * 100; System.out.println((new java.text.DecimalFormat(“###########################.################################################################################”)).format(d)); ( https://ideone.com/WG6zeC ) 我并不是我的解决方案的粉丝,因为制作一个不能涵盖所有案例的巨大模式对我来说很难看。 你还有另一种方法吗? 我真的想要所有的小数, 没有科学的符号 , 没有尾随零 。 谢谢 PS:我需要这个没有外部库和Java 1.7。

在Java中使用Hash加倍

我想知道如何在Java中散列一个double? 我已经散列了其他原始数据和对象。 我以为我可以使用哈希码方法? 从我所看到的,这看起来非常复杂。 我遇到了一些关于创造种子的事情。 我想知道如何解决这个问题。 希望将我的哈希码的其余部分用于具有double的类? 我想知道我是否有问题试图在java中散列arraylists,数组和其他对象。 我的一些课程包含了arraylists。 非常感谢

为什么整数不代表Java中的NaN?

当我写的东西像 double a = 0.0; double b = 0.0; double c = a/b; 结果是Double.NaN ,但是当我对整数尝试相同时,它会产生ArithmeticException 。 那么,为什么没有Integer.NaN ?

显示双精度和浮点数时如何对齐小数点

如果我有以下小数点数: Double[] numbers = new Double[] {1.1233, 12.4231414, 0.123, 123.3444, 1.1}; for (Double number : numbers) { System.out.println(String.format(“%4.3f”, number)); } 然后我得到以下输出: 1.123 12.423 0.123 123.344 1.100 我想要的是: 1.123 12.423 0.123 123.344 1.100

Java:d​​ouble:如何总是显示两位小数

我在我的项目中使用double值,我想总是显示前两位小数,即使它们是零。 我使用此函数进行舍入,如果我打印的值是3.47233322,它(正确)打印3.47。 但是,当我打印时,例如,值2它打印2.0。 public static double round(double d) { BigDecimal bd = new BigDecimal(d); bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } 我想打印2.00! 有没有办法在不使用字符串的情况下执行此操作? 谢谢! 编辑:从你的答案(我感谢你)我明白我不清楚我在搜索什么(我很抱歉):我知道如何使用解决方案在数字后打印两位数建议…我想要的是直接存储两位数的双值! 所以当我做类似这样的事情时, System.out.println(“” + d) (其中d是我的双倍值2)它打印2.00。 我开始认为没有办法做到这一点……对吗? 无论如何,再次感谢您的回答,如果您知道解决方案,请告诉我!

如何正确显示最高两位小数(美分)的价格,包括Java中的尾随零?

这里有一个关于在Java中舍入小数的好问题。 但我想知道如何在我的程序中包含尾随零以显示价格:$ 1.50,$ 1.00 简单的解决方案 String.format(“%.2g%n”, 0.912385); 工作正常,但如果它在最后一个小数位,则省略尾随零。 即使我只使用这样的表达式,问题出现在我的程序中: double price = 1.50; 当我使用不同的价格(添加,乘法等)进行计算时,结果主要显示如下: $2.5000000000000003 因此,使用String.format可以正常工作,但它会将上面的示例截断为 $2.5 是否有正确的方法在小数点后第二位显示尾随零? 如果计算的输出应该是,则两个都为零 $2.00

具有双坐标的多边形

我有一些关于具有Double类型点的多边形的问题…我需要做的是,给定点,创建多边形,然后测试1个具体点是否在多边形内部。 所以我知道在Java中有一个叫做Polygon的类,就像这样使用:(三角形) int valoresX[] = { 100, 150, 200 }; int valoresY[] = { 100, 200, 100 }; int n = valoresX.length; Polygon city= new Polygon(valoresX,valoresY,n); 但我的“多边形”必须是“双”类型,而不是“int”(简单示例) Double valoresX[] = { 1000.10, 150.10, 200.10 }; Double valoresY[] = { 100.10, 200.10, 100.10 }; 在我的项目中,我真的不需要在applet或类似物上绘制它,我只需要计算点是否在内部。 所以我的问题是: 有没有办法用双coordenates做多边形,如果点(double)在多边形内部,是否可以进行calcultate? 谢谢大家! Shudy

具有给定精度的快速双字符串转换

我需要将double转换为具有给定精度的字符串。 String.format(“%.3f”, value) (或DecimalFormat)完成了这项工作,但基准测试表明,与不是非常快的Double.toString转换相比,它速度很慢(在我的机器上转换100万个数字大约需要1-3秒) )。 有没有更好的方法呢? 更新:基准测试结果 从0到1000000的随机数,结果是每毫秒的运算(Java 1.7.0_45) Benchmark Mean Mean error Units String_format 747.394 13.197 ops/ms BigDecimal_toPlainString 1349.552 31.144 ops/ms DecimalFormat_format 1890.917 28.886 ops/ms Double_toString 3341.941 85.453 ops/ms DoubleFormatUtil_formatDouble 7760.968 87.630 ops/ms SO_User_format 14269.388 168.206 ops/ms 更新: Java 10,+ ryu Mode Cnt Score Error Units String_format thrpt 20 998.741 ± 52.704 ops/ms BigDecimal_toPlainString […]