java - 如何保持用户输入的精度?
问题描述
我想创建一个计算器。出于说明目的,让我将问题简化如下。
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class NumberFormating {
public static void main(String[] argas) {
List<String> sInputs = new ArrayList<String>();
sInputs.add("12345.67890");
sInputs.add("12345678901234.5");
sInputs.add("123456789012.345");
sInputs.add("1234567890.12345");
sInputs.add("123456.789012435");
sInputs.add("1.23456789012345");
sInputs.add("0.00123456789012");
sInputs.add("0.0012345");
for (String s : sInputs) {
BigDecimal number = new BigDecimal(s);
number = number.round(new MathContext(15, RoundingMode.HALF_UP));
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat df = new DecimalFormat("#,###.##", symbols);
System.out.println(df.format(number));
}
System.out.println("==== END ====");
}
}
我想获得具有数字分组和用户输入的原始精度的输出。最大精度为 15。
意外结果(左)和预期结果(右)如下:
12 345.68 --> 12 345.67890
12 345 678 901 234.5 --> 12 345 678 901 234.5
123 456 789 012.34 --> 123 456 789 012.345
1 234 567 890.12 --> 1 234 567 890.12345
123 456.79 --> 123 456.789012435
1.23 --> 1.23456789012345
0 --> 0.00123456789012
0 --> 0.0012345
请问如何实现这样的要求?
奖励:如果您可以对小数部分(小数点后的数字)进行数字分组,那就更好了。
解决方案
你得到上面的结果是因为你定义了DecimalFormat df = new DecimalFormat("#,###.##", symbols);
两个小数点。你可以使用这样的东西来获得你想要的结果,
DecimalFormat df = new DecimalFormat("#,###.###############", symbols);
推荐阅读
- java - 在 Java 应用程序端控制图像质量
- python - 如何在 Python Flask OpenID 中获取 id_token?
- asp.net-core - app_offline.htm 导致 .net core 3.1 应用程序终止
- cytoscape.js - 双击 cytoscape.js 中的节点不起作用
- javascript - 如何使用 socket.io 发出一个在连接的客户端之间更新的数组
- jax-rs - 如何在 JAX-RS 过滤器中记录请求处理时间
- scala - 在 Spark 应用程序中使用 Apache Directory API
- google-cloud-platform - 自动修复云 DNS google 和 Godaddy
- kubernetes - 在 Pod 启动之前挂载 EKS EFS CSI 超时
- c++ - 在 C++ 中是否有 C# 中的关键字“where”的类似物?