gpt4 book ai didi

java - DecimalFormat - 保留所有十进制数字

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:06 24 4
gpt4 key购买 nike

我正在使用 DecimalFormat 将 double 格式化为字符串。然后将该字符串集成到我的表示层中。

  • 问题:我想保留所有小数。 示例:“12345678.123456789”
  • 问题:我应该使用什么格式?
  • 备注:我使用不同的Locale来支持多种布局。

格式: #.## -> 这使用所有小数点之前的数字,但ROUNDS 数字 AFTER 小数点。

我可以使用 #.######### 表示大的小数,但如果小数更长呢?

我发现我的小测试程序很有用,想与您分享。

你能帮我显示所有小数吗?

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?这个问题没有解决我的问题,因为它着重于限制大小,但我需要尽可能长时间地保留它。

最佳答案

String.format 可能对您有所帮助 - NumberFormat

  private static void printfWithLocale(Locale locale, Double d){
System.out.println("Output locale: " + locale.toString());
String simpleOutputTeplate = "simpleOutputTeplate: %s";
String refinedOutputTeplate = "refinedOutputTeplate: %.10f";

System.out.println(String.format(locale, simpleOutputTeplate, d));
System.out.println(String.format(locale, refinedOutputTeplate, d));

}

public static void main(String[] args) {

Double d = new Double(3.1234567890123456789);

printfWithLocale(Locale.US, d);
System.out.println("");
printfWithLocale(Locale.FRANCE, d);
}

代码输出:

Output locale: en_US
simpleOutputTeplate: 3.1234567890123457
refinedOutputTeplate: 3.1234567890

Output locale: fr_FR
simpleOutputTeplate: 3.1234567890123457
refinedOutputTeplate: 3,1234567890

您会注意到 %s(字符串)不符合 Locale,但会将 Double 格式化为最多 17 个小数点。使用 String.format,您可以进一步改进数字在字符串中的格式化方式。

关于java - DecimalFormat - 保留所有十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40304462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com