我正在尝试将float转换为String并将逗号插入到生成的String中。我不想添加/删除任何零,更改浮动的精度,或进行任何类型的舍入。我希望String结果与原始浮点数完全相同,只需添加逗号。区域性不可知解决方案将是首选。
我需要什么:
public String convertFloat(float number) {
// return converted String with commas and no rounding or extra digits
}
一些输入/输出示例:
鉴于浮动:1500
结果:" 1,500"
给定浮动:0.00210014
结果:" 0.00210014"
给定浮动:168874.00210014
结果:" 168,874.00210014"
鉴于浮动:168874.01
结果:" 168,874.01"
我尝试过的事情:
String.valueOf(168874.00210014f) // Does not work for me because the result does not contain commas
String.format("%,f", 10.2f) // Does not work for me because it inserts a bunch of zeroes on the end
// The below does not work for me because the precision gets thrown off and the result ends up being: 14.1999998093 When it should be just: 14.2
NumberFormat f = NumberFormat.getInstance();
f.setMaximumFractionDigits(10);
System.out.println(f.format(14.2f));
// Result: 14.1999998093
// The below does not work for me because a bunch of random extra digits get thrown onto the end
DecimalFormat f = new DecimalFormat("#,###.##########");
System.out.println(f.format(100514.2f));
// Result: 100,514.203125
// The below does not work for me because it rounds to 2 decimal places
DecimalFormat f = new DecimalFormat("#,###.00");
System.out.println(f.format(100514.21351f));
// Result: 100,514.203125
// Does not work for me because it rounds to 2 decimal places.
String s = String.format("%,.2f", 10.2629f)
我想做的事情似乎很简单。如何在结果字符串中添加逗号来获得完全相同的数字?
答案 0 :(得分:1)
认识到float
约 7位小数精度 - 约非常重要,因为十进制数字可以'无法准确表达。
您的示例值100514.213512345f不会以您放入的方式返回,因为原始值必然会被截断为100514.2附近某处的某个值
我知道你不想要任何舍入,但它是计算机上浮点数学的本质。即使你使用双精度,你也只是缩小了圆角 - 圆角的问题不会消失。
答案 1 :(得分:0)
默认为6位数。
我找到的指针很少: -
Float正在扭曲十进制之后的值,而double则不是。因此,建议使用double。
在原始数字中,不可能显示小数点后的数字。因此,下面是一个解决方法:
String string = String.format("%,.6654f", Math.abs(n)).replaceAll("0*$", "")
n是双数而不是浮点数。
我已经使用6654作为随机最大十进制数字,如果需要,可以增加数字。
答案 2 :(得分:0)
这是一种黑客攻击,但你可以替换前面的零
thankForLogginln
至于大数字的精确度,你应该使用String.format("%,f", 10.2f).replaceAll("0*$","")
此外,如果其圆数
BigDecimal
答案 3 :(得分:0)
OP,
这些答案都不适合我。事实证明,在我的情况下,转换为double是不可能的。所以我决定牺牲逗号,然后选择String.valueOf()
方法
答案 4 :(得分:0)
承认其他人已经发布的有关浮动中允许的数字数量有限的内容,这里有一个版本,当你在限制范围内时应该可以工作,并且如果它们属于正确属性,则不会删除连续的0漂浮。我们基本上只是将输入分成2个子串并将逗号格式添加到上半部分。
String input = String.valueOf(number);
int decimalIndex = input.indexOf(".");
String firstHalf = input.substring(0, decimalIndex);
String secondHalf = input.substring(decimalIndex, input.length());
String commas = String.format("%,d", Integer.parseInt(firstHalf));
return commas + secondHalf;
如果你想保持更高的精确度,那么请使用双打而不是花车。