【问题标题】:Convert double to double with one decimal point and one decimal place?将双精度转换为双精度,带一位小数和一位小数?
【发布时间】:2015-11-19 17:14:21
【问题描述】:

我想以一位小数点和一位小数位的格式将任何双精度数舍入为双精度数,因此 29575.347434 将是 2.3。

尝试使用 decimalFormat 执行此操作,但是当我尝试 #.# 时,我只得到一个格式为 29575.3 的字符串,并且我不知道如何在保持我的值双倍的同时切断所有小数点。

【问题讨论】:

  • 您可能不得不将其视为一个字符串——29575.347434 不会以任何标准数学方式舍入到 2.3....至于保持双精度,只需将其解析回来。
  • 那么你想得到最左边的整数位,后跟一个小数点,然后是最左边的小数位?
  • @Cinnam 是的,完全一样

标签: java double decimal rounding


【解决方案1】:

你可以得到String的号码,取第一个数字和'.'之后的数字。对于非负数,

String s = Double.toString(29575.347434);
double d = Double.parseDouble(s.charAt(0) + "." + s.charAt(s.indexOf('.') + 1));
System.out.println(d); // 2.3

如果数字可以是负数,则必须更正代码中可能出现的减号。

【讨论】:

  • 我认为这不会将数字的小数部分四舍五入,只是修剪它。
  • @KyleGowen 你是对的,但这似乎是 OP 想要的。
  • 哦。他说他想完成他的替补。所以我认为他想要四舍五入。
【解决方案2】:

您可以通过使用模运算符 % 来完成此操作。

您的十进制格式似乎正在使用#.#。这将为您提供整数和一位小数。然后你可以做你的数字 29575.3 % 10 并得到 5.3。

试试这段代码看看:

System.out.println(29575.3d % 10);

【讨论】:

    【解决方案3】:

    尝试以下方法:

    Number(parseFloat(29575.347434).toFixed(1))
    

    您也可以传递一个 string ,因为parseFloat() 会将其转换为 number,然后转为希望的 decimal(输出为 string),然后通过函数Number() 转换回decimal

    为我工作。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2013-08-27
      • 2011-07-07
      相关资源
      最近更新 更多