将数字格式化为两位小数而不进行舍入并转换为Double

时间:2014-04-11 17:59:29

标签: java input string-formatting

我知道这个问题已被多次质疑,但我在其他线程中尝试了所有解决方案,而且我找不到符合我想要的解决方案......

所以我有一个像-9.22841这样的输入,它被读作一个字符串,我想要做的是将这个数字格式化为两个小数,如-9.23,而不是将其四舍五入然后转换它会加倍而不会失去这种格式...

我尝试了许多方法,例如String.format("%.2f",number)和下面的方法......

  String l = -9.22841
  DecimalFormat df = new DecimalFormat("#,00");
  String tmp =df.format(l);
  double t = Double.parseDouble(tmp);

和这一个:

  String l = -9.22841
  DecimalFormat df = new DecimalFormat("#.00");
  String tmp =df.format(l);
  double t = Double.parseDouble(tmp);

但每当我尝试在String.format("%.2f",number)DecimalFormat df = new DecimalFormat("#.00");中转换为double时,会将错误转换为双倍

当我这样做时:

DecimalFormat df = new DecimalFormat("#,00");

输出错误,类似于-9.23,应该是-9.22

感谢您的时间......

4 个答案:

答案 0 :(得分:1)

您可以在小数点后切掉字符串两个空格:

String number = "-9.22841";
String shorterNumber = number.substring(0, number.indexOf(".")+3);
double t = Double.parseDouble(shorterNumber);
System.out.println(t);

答案 1 :(得分:1)

这就是你想要的:

String number = "-9.22841";
DecimalFormat formatter = new DecimalFormat("0.00"); 
formatter.setRoundingMode(RoundingMode.DOWN); 
number = formatter.format(Double.valueOf(number));
System.out.println(number);

输出将是:

-9,22

答案 2 :(得分:0)

您可以使用以下功能:

import java.text.DecimalFormat;
import java.math.RoundingMode;


public static double formatValue(Double number) {
        DecimalFormat df = new DecimalFormat("####0.00");

        df.setRoundingMode(RoundingMode.DOWN);
        return Double.parseDouble(df.format(number));
    }

输入= 31.6227890, 输出= 31.62

答案 3 :(得分:0)

对于那些希望进行十进制处理的人:科特林

fun validateNumber(number: String): String {
        return if (number.contains(".") && number.length > 3+number.indexOf("."))
            number.substring(0, number.indexOf(".")+3)
        else if (number.contains(".")){
            number.substring(0, number.indexOf(".")+2)+"0"
        }else{
            "$number.00"
        }
    }