使用小数分隔符格式化数字/字符串

Posted

技术标签:

【中文标题】使用小数分隔符格式化数字/字符串【英文标题】:formating a number/string with decimal separator 【发布时间】:2013-02-28 06:59:21 【问题描述】:

我正在尝试使用DecimalFormat 格式化数字。但我希望它格式化一个数字,就像

input: 1234.  -->  should be formatted to: 1,234.

但我得到 1,234.01,234.00 取决于我的十进制格式规则 我必须做什么才能完成这项工作?

【问题讨论】:

您的哪些规则会导致错误输出? 你能展示你如何使用DecimalFormat的示例代码吗? 【参考方案1】:

应该帮助您的方法是setMinimumFractionDigits 和setMaximumFractionDigits。

format.setMinimumFractionDigits(0);

猜测一下,可能就是您要找的东西。


要确保始终显示小数分隔符,请使用:DecimalFormat.setDecimalSeparatorAlwaysShown(true)

【讨论】:

我无法使用分隔符获得输出。像输入:1. 和输出:1. 只有 1 或 1.0 第一次没有把它当作要求。更新了解决问题的答案。【参考方案2】:

无论是否为小数,您都可以使用

格式化数字
DecimalFormat f = new DecimalFormat("#,###"); 
f.format(whatever)...

【讨论】:

【参考方案3】:

如果您不想显示任何小数位,请不要格式化浮点值:) 如果您使用BigIntegerintlong,应该没问题:

import java.math.*;
import java.text.*;

public class Test 

    private static final char p = 'p';

    public static void main(String[] args) 
        NumberFormat format = new DecimalFormat();
        BigInteger value = BigInteger.valueOf(1234);
        System.out.println(format.format(value));
        System.out.println(format.format(1234));
        System.out.println(format.format(1234L));
    

【讨论】:

问题是,我想显示点。它就像一个输入,您添加单个值。所以,我希望显示点。 @user2118495:显示小数分隔符后没有小数位的情况非常。我不记得曾经在用户界面或人类写作中看到过这种情况。如果发现它不受支持,我不会感到惊讶。 如果我在几个计算器上按下点,我得到的分隔符后面没有任何数字。这就是我想要的方式。就像通常的计算器输入一样。 @user2118495:但那是在接受输入时——而不是格式化输出 是的。我在输入时格式化。在读取每个数字后,我都会格式化。我添加了一个答案。【参考方案4】:

试试这个:

DecimalFormat df = new DecimalFormat("#,###.", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
System.out.println(df.format(1234));

【讨论】:

以上是关于使用小数分隔符格式化数字/字符串的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 将数字格式化为字符串 - 使用小数和千位分隔符

为啥 ToString 使用不正确的小数分隔符格式化数字

将数字格式化为字符串-带小数和千位分隔符

PHP字符串函数 number_format(以千位分隔符方式格式化一个数字)

在python中使用本地化的千位分隔符和小数精度格式化数字

检测 VB.Net 中数字的文化,即小数点/千位分隔符的句点或逗号