Int String格式问题

时间:2009-12-14 00:22:18

标签: java string formatting int

我回来了,它类似于你如何看待美元,$“32.95”等我用美分计算它是一个int,但问题是下半部分切断了10美分的部分如果数量少于那个。例如,如果我有“32.08”,则返回“32.8”。有任何想法吗 ?我知道我需要一个if但我不能想如何写它。

public String toString()
{
    return (cents / 100)+ "." + (cents % 100);
}

8 个答案:

答案 0 :(得分:6)

您可以使用http://java.sun.com/j2se/1.5.0/docs/api/java/text/DecimalFormat.html

  

DecimalFormat是NumberFormat的具体子类,用于格式化十进制数。它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。所有这些都可以进行本地化。

String pattern = "$###,###.###";
double value = 12345.67;
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
// => 12345.67 $###,###.### $12,345.67

答案 1 :(得分:3)

快速破解:

return String.format("%d.%02d", cents/100, cents%100);

答案 2 :(得分:0)

使用BigDecimal类,这就是它的用途。

答案 3 :(得分:0)

您可以随时检查%100是否小于10,如果是,则再添加0.这可能是一个更优雅的解决方案。

答案 4 :(得分:0)

因此,32.08 % 100 8不是08。当然,您可以为小于10的值添加"0"

但是,您可能需要考虑使用java.text,尤其是NumberFormatDecimalFormatMessageFormat。如果您尝试编写机器可读文本,java.util.Formatter和“printf”可能更合适。

答案 5 :(得分:0)

NumberFormat nf=NumberFormat.getInstance(); // Get Instance of NumberFormat
nf.setMinimumIntegerDigits(5);  // The minimum Digits required is 5

return (cents / 100)+ "." + nf.format(cents % 100);

应该这样做,因为我做了java一段时间。

答案 6 :(得分:0)

(""+(100+cents%100)).substring(1) // LOL

(cents / 100)+ "." + (cents /10 %10) + (cents % 10); // <<== OK

答案 7 :(得分:0)

抽象在哪里? Java是一种面向对象的语言。将所有实现细节封装在Money类中并将其隐藏在客户端中不是一个更好的主意吗?