Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字符串中删除尾随零?_Java_String - Fatal编程技术网

Java 如何从字符串中删除尾随零?

Java 如何从字符串中删除尾随零?,java,string,Java,String,我有一个字符串salePrice,它的值可以是29.90000,91.01000,我想得到类似29.90,91.01的输出,如中所示,小数点后有两位数字。我在用一根绳子 试试这个 int lastIndex = salePrice.indexOf(".") + 2 salePrice = salePrice.substring(0, lastIndex); DecimalFormat df2 = new DecimalFormat( "#,###,###,###.##" ); double d

我有一个字符串
salePrice
,它的值可以是
29.90000,91.01000
,我想得到类似
29.90,91.01
的输出,如中所示,小数点后有两位数字。我在用一根绳子

试试这个

int lastIndex = salePrice.indexOf(".") + 2
salePrice = salePrice.substring(0, lastIndex);
DecimalFormat df2 = new DecimalFormat( "#,###,###,###.##" );
double dd = 100.2397;
double dd2dec = new Double(df2.format(dd)).doubleValue();

可能的解决办法之一

new BigDecimal("29.90000").setScale(2).toString()
或者如果你需要的话

new BigDecimal("29.90100").setScale(2, RoundingMode.HALF_UP).toString()
使用BigDecimal,因为从字符串转换为双精度可能会丢失精度

选择适合您情况的舍入模式

您可以使用

String.format("%.2f", value);
你可以用

String.format("%.2f", value);

这里有一个与你的问题相匹配的老派方法(你总是需要2位小数)

公共类LearnTrim
{
公共静态void main(最终字符串[]参数)
{
字符串值1=“908.0100”;
字符串值2=“876.1”;
字符串值3=“101”;
字符串值4=“75.75”;
字符串值5=“31。”;
System.out.println(value1+“=>”+trimmy(value1));
System.out.println(value2+“=>”+trimmy(value2));
System.out.println(value3+“=>”+trimmy(value3));
System.out.println(value4+“=>”+trimmy(value4));
System.out.println(value5+“=>”+trimmy(value5));
}
私有静态字符串trimmy(最终字符串值)
{
整数分贝指数;
字符串返回值;
int valueLength=value.length();//使用StringUtils.length()实现空安全性。
decimalIndex=value.indexOf('.');
如果(十进制数!=-1)
{
如果(十进制<(值长度-3))
{
returnValue=value.substring(0,valueLength-2);
}
else if(十进制指数==(值长度-3))
{
返回值=值;
}
else if(十进制指数==(值长度-2))
{
returnValue=value+“0”;
}
else//decimalIndex==valueLength-1
{
返回值=值+00;
}
}
其他的
{
返回值=值+“.00”;
}
返回值;
}
}

这些是尾随的零,而不是前导的零。您做了什么来解决这个问题?如果你告诉我们你到目前为止做了什么,我们会更愿意回答你的问题。(询问更好问题的有用链接:,)@Raedwald不是dup;此问题希望保留最后两个数字在继续之前阅读此内容,以及+1,但它不应该是
,####,#########
?因为数字并不总是以
0.00
@doorknoble Jeje结尾。。。修正了…事实上,小数点+1后的2位数应该是“0.00”
BigDecimal
经常被忽略。哦,顺便说一句,这就是“丢失”:p但是一个
double
的精度确实不高:p@fge,好的答案必须正确且有趣!顺便说一句,它将失败29。90100@EvgeniyDorofeev,谢谢,修复了。@yannishristofakis感谢分享。值是表示某个值时的常用术语。将值转换为字符串并不是什么大问题。所以让我们等待OP的响应,看他是否能得到它。祝你好运。
public class LearnTrim
{
    public static void main(final String[] arguments)
    {
        String value1 = "908.0100";
        String value2 = "876.1";
        String value3 = "101";
        String value4 = "75.75";
        String value5 = "31.";

        System.out.println(value1 + " => " + trimmy(value1));
        System.out.println(value2 + " => " + trimmy(value2));
        System.out.println(value3 + " => " + trimmy(value3));
        System.out.println(value4 + " => " + trimmy(value4));
        System.out.println(value5 + " => " + trimmy(value5));
    }

    private static String trimmy(final String value)
    {
        int decimalIndex;
        String returnValue;
        int valueLength = value.length(); // use StringUtils.length() for null safety.

        decimalIndex = value.indexOf('.');
        if (decimalIndex != -1)
        {
            if (decimalIndex < (valueLength - 3))
            {
                returnValue = value.substring(0, valueLength - 2);
            }
            else if (decimalIndex == (valueLength - 3))
            {
                returnValue = value;
            }
            else if (decimalIndex == (valueLength - 2))
            {
                returnValue = value + "0";
            }
            else // decimalIndex == valueLength - 1
            {
                returnValue = value + "00";
            }
        }
        else
        {
            returnValue = value + ".00";
        }

        return returnValue;
    }
}