【问题标题】:Java String format decimals only仅 Java 字符串格式小数
【发布时间】:2023-03-16 23:45:01
【问题描述】:

有没有办法使用String.format() 格式化双精度以仅获取小数?

System.out.println(String.format("%.2f", 1.23456d));

正如预期的那样,上面的行返回“1.23”,但在这种情况下,我只对“.23”感兴趣。 此外,我对小数点前的任何内容都不感兴趣,也没有前导 0。

这可以使用String.format() 还是我需要使用DecimalFormat

干杯

【问题讨论】:

  • 如果数字来自像 float 这样的原始数据类型,您可以执行 (myFloat - (int)myFloat)
  • 你是对的。但这会留下前导 0 --> 0.23 如果可能的话,我还想用一个 String.format 表达式摆脱前导 0 ;)。将在几秒钟内更新上面的文字...
  • @darksaga 不幸的是没有。在点之后的格式公式中,您可以设置精度,但在点之前,您设置输出数据的最小宽度,对于浮点数不能设置为零(负值只会将输出调整到左侧,正值调整到右侧)。
  • 把它变成一个字符串并使用 split("\\.") 得到小数部分怎么样?
  • @DeH 目前我正在使用以下表达式: String str = String.format("%.2f", 1.23456d);str = str.substring(str.length()-3) ;我认为如果可以直接使用 String.format 对其进行格式化,我可以摆脱子字符串,以使我的代码更有效;)

标签: java string format string-formatting string.format


【解决方案1】:

您可以对String.format的输出进行后处理:

String.format("%.2f", 1.23456d).replaceFirst("^[^.//]+", "")

【讨论】:

  • 这就是我目前所做的,请参阅上面的评论 (@DeH)。不过,我认为使用正则表达式的 replaceFirst() 代码会比我目前使用的子字符串代码慢。我试图摆脱不必要的字符串操作;)...
猜你喜欢
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多