相关疑难解决方法(0)

如何在Java中将数字舍入到n个小数位

我想要的是一种将double转换为使用half-up方法进行舍入的字符串的方法 - 即如果要舍入的小数为5,则它总是向上舍入到前一个数字.这是在大多数情况下舍入大多数人所期望的标准方法.

我也希望只显示有效数字 - 即不应该有任何尾随零.

我知道这样做的一种方法是使用该String.format方法:

String.format("%.5g%n", 0.912385);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91239
Run Code Online (Sandbox Code Playgroud)

这很好,但它总是显示5位小数的数字,即使它们不重要:

String.format("%.5g%n", 0.912300);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91230
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用DecimalFormatter:

DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91238
Run Code Online (Sandbox Code Playgroud)

但是你可以看到这使用了半均匀舍入.也就是说,如果前一个数字是偶数,它将向下舍入.我想要的是这个:

0.912385 -> 0.91239
0.912300 -> 0.9123
Run Code Online (Sandbox Code Playgroud)

在Java中实现这一目标的最佳方法是什么?

java decimal rounding digits

1209
推荐指数
22
解决办法
155万
查看次数

为什么Math.round(0.49999999999999994)会返回1?

在以下程序中,您可以看到每个值略小于.5向下舍入,除了0.5.

for (int i = 10; i >= 0; i--) {
    long l = Double.doubleToLongBits(i + 0.5);
    double x;
    do {
        x = Double.longBitsToDouble(l);
        System.out.println(x + " rounded is " + Math.round(x));
        l--;
    } while (Math.round(x) > i);
}
Run Code Online (Sandbox Code Playgroud)

版画

10.5 rounded is 11
10.499999999999998 rounded is 10
9.5 rounded is 10
9.499999999999998 rounded is 9
8.5 rounded is 9
8.499999999999998 rounded is 8
7.5 rounded is 8
7.499999999999999 rounded is 7
6.5 rounded is 7 …
Run Code Online (Sandbox Code Playgroud)

java floating-point double rounding

561
推荐指数
5
解决办法
7万
查看次数

将一个小数加倍到2位小数

如果值为200.3456,则应格式化为200.34.如果是200,那应该是200.00.

java double rounding

447
推荐指数
11
解决办法
113万
查看次数

408
推荐指数
9
解决办法
26万
查看次数

169
推荐指数
9
解决办法
14万
查看次数

用于表示美元金额的最佳django模型字段是什么?

我需要在Django模型的字段中存储一美元金额.什么是最好的模型字段类型?我需要能够让用户输入这个值(通过错误检查,只需要一个精确到美分的数字),格式化输出给不同地方的用户,并用它来计算其他数字.

django django-models

92
推荐指数
4
解决办法
4万
查看次数

Java:如何为double值设置Precision?

我最近正在处理数字,我有一种情况,我希望将双精度值的精度设置为6位数或4位数,具体取决于数据库中存储的值.

例如,如果在数据库中精度设置为4位,则输出必须为,

10.0000.

我试过DecimalFormat并使用字符串##.####,但每次使用符号都很烦人.

有没有更好的方法,如下所示:

Double value = 10.0;
value.setPrecision(4);
Run Code Online (Sandbox Code Playgroud)

java

86
推荐指数
5
解决办法
31万
查看次数

如何将字符串格式化为金钱

我有一个字符串000000000100,我想转换为1.00,反之亦然.

前导零将被删除,最后两位是小数.

我举一个例子:

000000001000 <=> 10.00
000000001005 <=> 10.05
000000331150 <=> 3311.50
Run Code Online (Sandbox Code Playgroud)

下面是我正在尝试的代码,它给我的结果没有小数:

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));
Run Code Online (Sandbox Code Playgroud)

c#

71
推荐指数
6
解决办法
25万
查看次数

双人真的不适合赚钱吗?

我总是在c#中告诉double类型的变量不适合赚钱.所有奇怪的事情都可能发生.但我似乎无法创建一个示例来演示其中的一些问题.谁能提供这样的例子?

(编辑;这篇文章最初被标记为C#;一些回复指的是具体细节decimal,因此意味着System.Decimal).

(编辑2:我特别要求一些c#代码,所以我不认为这只是语言不可知)

c# language-agnostic currency decimal

69
推荐指数
4
解决办法
2万
查看次数

格式化货币没有货币符号

NumberFormat.getCurrencyInstance(myLocale)用来获取我给出的语言环境的自定义货币格式.但是,这总是包含我不想要的货币符号,我只想要我没有货币符号的给定区域设置的正确货币编号格式.

做一个format.setCurrencySymbol(null)抛出一个异常..

java currency number-formatting

57
推荐指数
4
解决办法
5万
查看次数