当前位置: 首页 > 面试题库 >

在Java中从BigDecimal移除尾随零

太叔永新
2023-03-14
问题内容

我需要从去除尾随零BigDecimal沿RoundingMode.HALF_UP。例如,

Value        Output

15.3456  <=> 15.35
15.999   <=> 16            //No trailing zeros.
15.99    <=> 15.99
15.0051  <=> 15.01
15.0001  <=> 15           //No trailing zeros.
15.000000<=> 15           //No trailing zeros.
15.00    <=> 15           //No trailing zeros.

stripTrailingZeros()
可以,但是在诸如此类的情况下,它会返回科学计数法,

new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();

在这种情况下,它返回6E+2。我需要在JSF中的自定义转换器中使用它,这对于最终用户可能很难看。那么,这样做的正确方法是什么?


问题答案:


toPlainString()

BigDecimal d = new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println(d.toPlainString()); // Printed 600 for me

我还没有进入JSF,但转换器可能看起来像这样:

@FacesConverter("bigDecimalPlainDisplay")
public class BigDecimalDisplayConverter implements Converter {
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        throw new BigDecimal(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        BigDecimal  bd = (BigDecimal)value;
        return bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
    }
}

然后在xhtml中:

<h:inputText id="bigDecimalView" value="#{bigDecimalObject}" 
    size="20" required="true" label="Value">
    <f:converter converterId="bigDecimalPlainDisplay" />
</h:inputText>


 类似资料:
  • 问题内容: 我是Java的新手,尝试使用BigDecimal(例如99999999.99)并将其转换为字符串,但没有小数位和尾随数字。另外,我不想在数字中加上逗号,也不需要四舍五入。 我试过了: 但不支持BigDecimal。 有任何想法吗? 非常感谢。 问题答案: 尝试

  • 问题内容: 我有字符串(来自DB),其中可能包含数字值。如果它包含数值,我想删除尾随零,例如: ,仅适用于第一个,而不适用于第二个。 很多答案都指向使用,但是我得到的可能不是数字。因此,我认为更好的解决方案可能是通过Regex。 问题答案: 有可能: 我懒又傻,只是 使用相同的解决方案,而不是某些注释中提到的,以便于理解

  • 问题内容: 我需要找到一种方法来在python中转换以下字符串: 等等。我尝试了.rstrip(‘0’)。rstrip(’。’),但是如果输入为0或00则不起作用。 有任何想法吗?谢谢! 问题答案: 更新了 通用以保持精度并处理看不见的值: 输出:

  • 问题内容: 我想删除所有结尾的零而不截断或舍入该数字(如果没有的话)。例如,数字可能类似于,在这种情况下,尾随零应被删除。但是这个数字也可能 几乎是 不合理的,比如在屏幕的边缘。有没有办法设置DecimalFormat或其他类以减少尾随的零,同时保持不合理性不变? 问题答案: 如果您愿意切换到,则可以使用#stripTrailingZeroes()方法来完成此操作。

  • 我正在尝试设置一个 nodemcu 模块来收集来自温度传感器的数据,并使用 mqtt pubsubclient 将其发送到我的 mqtt 代理,但这不是问题所在。 我正在尝试以只有一个小数的格式发送温度,此时我已经成功地将其向上或向下舍入,但格式不正确。截至目前,它将温度四舍五入为24.50,27.80,23.10等。我想删除尾随的zereos,所以它变成24.5,27.8,23.1等。 到目前为

  • 问题内容: 我有一个很长的小数列表,我必须根据某些条件将其调整为10、100、1000,.... 1000000。当我将它们相乘时,有时会想要删除一个无用的尾随零(尽管并非总是如此)。例如… 是否有一个函数告诉小数对象舍弃这些无关紧要的零?我能想到的唯一方法是将其转换为字符串并使用正则表达式替换它们。 应该提到我正在使用python 2.6.5 EDIT senderle的好答案使我意识到,我偶尔