我正在使用DecimalFormats将双打格式化为字符串。然后这个字符串被集成到我的表示层中。
格式:#.#-
我可以用##########对于大小数点,但是如果小数点更长呢?
我发现我的小测试程序很有用,想和大家分享。
你能帮我显示所有小数吗?
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
=============================================================
编辑:一位用户提到了一个相关的问题:如何很好地将浮点数格式化为字符串,而不需要不必要的十进制0?这个问题并不能解决我的问题,因为它的重点是限制大小,但我需要尽可能长时间地保持它。
因为double并不完全代表一些数字,所以如果你把小数切割到给定的长度(比如17)也没关系。请参见另一个问题,了解java中有多少有效数字具有浮点数和双精度?
一串格式可能对你有所帮助-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(字符串)不符合区域设置,但会将双倍格式设置为17个小数点。使用String.format您可以进一步完善字符串中数字格式的方式。
是否可以使用一种方法或其他方法,而不是“%.6f”。格式(值)以实现相同的目标?这是我的代码: 我想让它更具动态性和可读性
Python3 实例 以下代码用于实现十进制转二进制、八进制、十六进制: # -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # 获取用户输入十进制数 dec = int(input("输入数字:")) print("十进制数为:", dec) print("转换为二进制为:", bin(dec
有没有办法防止对象自动将小数点向右移动两位? 此代码: 产生: 但是我希望它能产生:
问题内容: 我在格式化双精度小数时遇到一些问题。如果我有一个双精度值,例如4.0,我该如何格式化小数位使其改为4.00? 问题答案: 一种方法是使用NumberFormat。
我在格式化双精度小数时遇到了一些问题。如果我有一个双精度值,例如4.0,我如何设置小数的格式,使其变为4.00?
主要内容:二进制数、八进制数和十六进制数的表示,二进制数、八进制数和十六进制数的输出C语言中的整数除了可以使用十进制,还可以使用二进制、八进制和十六进制。 二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。 1) 二进制 二进制由 0 和 1 两个数字组成,使用时必须以