【发布时间】:2016-10-28 11:50:24
【问题描述】:
我正在使用 DecimalFormat 将双精度数格式化为字符串。 然后将此字符串集成到我的表示层中。
- 问题:我想保留所有小数。 例如:“12345678.123456789”
- 问题:我应该使用什么格式?
- 备注:我使用不同的 Locale 来支持多种布局。
格式: #.## -> 这使用 ALL 数字 BEFORE 小数点,但 >ROUNDS 小数点之后的数字。
我可以使用#.#########作为大小数,但是如果小数更长呢?
我发现我的小测试程序很有用,想与你分享。
你能帮我显示所有小数吗?
package be.softwarelab.numbers;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
public class DecimalNumbersTest {
private static final double NUMBER = 123456789.123456789;
public static void main(String[] args) {
String format01 = "#.";
String format02 = "#.#";
String format03 = "#.##";
String format04 = "#.###";
String format05 = "#.####";
System.out.println("====== NUMBER ===== USA =====================================");
showResult(NUMBER, format01, Locale.US);
showResult(NUMBER, format02, Locale.US);
showResult(NUMBER, format03, Locale.US);
showResult(NUMBER, format04, Locale.US);
showResult(NUMBER, format05, Locale.US);
System.out.println("====== NUMBER ===== France ==================================");
showResult(NUMBER, format01, Locale.FRANCE);
showResult(NUMBER, format02, Locale.FRANCE);
showResult(NUMBER, format03, Locale.FRANCE);
showResult(NUMBER, format04, Locale.FRANCE);
showResult(NUMBER, format05, Locale.FRANCE);
System.out.println("=============================================================");
}
public static void showResult(double number, String format, Locale locale) {
// Using a Locale to see the differences between regions.
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(locale);
DecimalFormat formatter = new DecimalFormat (format, otherSymbols);
// Create the String result
String output = formatter.format(number);
// Format the output for a nice presentation.
System.out.format(" %s %11s = %20s\n", locale, format, output);
}
}
这会导致:
====== NUMBER ===== USA =====================================
en_US #. = 123456789.
en_US #.# = 123456789.1
en_US #.## = 123456789.12
en_US #.### = 123456789.123
en_US #.#### = 123456789.1235
====== NUMBER ===== France ==================================
fr_FR #. = 123456789,
fr_FR #.# = 123456789,1
fr_FR #.## = 123456789,12
fr_FR #.### = 123456789,123
fr_FR #.#### = 123456789,1235
=============================================================
编辑:一位用户提到了一个相关问题:How to nicely format floating numbers to String without unnecessary decimal 0? 这个问题并没有解决我的问题,因为它侧重于限制大小,但我需要尽可能长时间地保持它。
【问题讨论】:
-
感谢您的反馈,但我没有在这个答案中找到我的解决方案。这专注于限制大小,但我需要尽可能长时间地保持它。我的客户需要看到准确性。我也不需要尾随零。
-
您是否在建议的答案中进行了调查?
-
"我可以使用#.######### 来表示大小数,但如果小数更长怎么办?" => 你到底在测量什么......?它真的精确到小数点后 10 位以上吗?还是这些值只是使用不太精确的数字计算的结果?
-
@Flown:是的,但没有找到解决方案。你有更深刻的见解吗?我应该进一步遵循相关问题的路径吗?我正在研究另一种方式,并随时通知您。
标签: java numbers decimalformat