我怎么能从float转换为string或string转换为float?
在我的情况下,我需要在2个值字符串(我从表中得到的值)和我计算的浮点值之间进行断言。
String valueFromTable = "25";
Float valueCalculated =25.0;
我尝试从float到string:
String sSelectivityRate = String.valueOf(valueCalculated );
但断言失败
答案 0 :(得分:363)
使用Java的Float
类。
float f = Float.parseFloat("25");
String s = Float.toString(25.0f);
比较它总是更好地将字符串转换为float并比较为两个浮点数。这是因为对于一个浮点数,有多个字符串表示,当作为字符串进行比较时它们是不同的(例如“25”!=“25.0”!=“25.00”等)。
答案 1 :(得分:32)
Float to string - String.valueOf()
float amount=100.00f;
String strAmount=String.valueOf(amount);
// or Float.toString(float)
Float的字符串 - Float.parseFloat()
String strAmount="100.20";
float amount=Float.parseFloat(strAmount)
// or Float.valueOf(string)
答案 2 :(得分:5)
您可以尝试以下代码示例:
public class StringToFloat
{
public static void main (String[] args)
{
// String s = "fred"; // do this if you want an exception
String s = "100.00";
try
{
float f = Float.valueOf(s.trim()).floatValue();
System.out.println("float f = " + f);
}
catch (NumberFormatException nfe)
{
System.out.println("NumberFormatException: " + nfe.getMessage());
}
}
}
找到here
答案 3 :(得分:4)
我相信以下代码会有所帮助:
float f1 = 1.23f;
String f1Str = Float.toString(f1);
float f2 = Float.parseFloat(f1Str);
答案 4 :(得分:2)
这是一个可能的答案,这也将给出精确的数据,只需要改变所需形式的小数点。
public class TestStandAlone { /** *This method is to main
* @param args void */ public static void main(String[] args) { // TODO Auto-generated method stub try { Float f1=152.32f; BigDecimal roundfinalPrice = new BigDecimal(f1.floatValue()).setScale(2,BigDecimal.ROUND_HALF_UP); System.out.println("f1 --> "+f1); String s1=roundfinalPrice.toPlainString(); System.out.println("s1 "+s1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
输出
f1 --> 152.32 s1 152.32
答案 5 :(得分:1)
这个方法不是很好,但很容易,没有建议。也许我应该说这是效率最低的方法和更糟糕的编码习惯,但是,使用起来很有趣,
float val=10.0;
String str=val+"";
空引号,在变量str中添加一个空字符串,将'val'向上转换为字符串类型。
答案 6 :(得分:0)
String str = "1234.56";
float num = 0.0f;
int digits = str.length()- str.indexOf('.') - 1;
float factor = 1f;
for(int i=0;i<digits;i++) factor /= 10;
for(int i=str.length()-1;i>=0;i--){
if(str.charAt(i) == '.'){
factor = 1;
System.out.println("Reset, value="+num);
continue;
}
num += (str.charAt(i) - '0') * factor;
factor *= 10;
}
System.out.println(num);
答案 7 :(得分:0)
如果要查找,请说小数点后两位。
Float f = (float)12.34;
String s = new DecimalFormat ("#.00").format (f);
答案 8 :(得分:0)
有三种方式可将 float转换为String。
有两种方式,可以将字符串转换为浮点型
示例:-
public class Test {
public static void main(String[] args) {
System.out.println("convert FloatToString " + convertFloatToString(34.0f));
System.out.println("convert FloatToStr Using Float Method " + convertFloatToStrUsingFloatMethod(23.0f));
System.out.println("convert FloatToStr Using String Method " + convertFloatToStrUsingFloatMethod(233.0f));
float f = Float.valueOf("23.00");
}
public static String convertFloatToString(float f) {
return "" + f;
}
public static String convertFloatToStrUsingFloatMethod(float f) {
return Float.toString(f);
}
public static String convertFloatToStrUsingStringMethod(float f) {
return String.valueOf(f);
}
}
答案 9 :(得分:0)
使用完整的手动方法:该方法通过将数字的小数点移至四舍五入,并使用下限(至长整数)和模数来提取数字,从而将双精度型转换为字符串。此外,它使用按基数计数来找出小数点所属的位置。一旦到达小数点后的位,它也可以“删除”数字的较高部分,以避免由于超大双精度而损失精度。参见末尾的注释代码。在我的测试中,当它们实际显示这些不精确的小数位后,它的精度从来没有比Java浮点表示形式精确。
/**
* Convert the given double to a full string representation, i.e. no scientific notation
* and always twelve digits after the decimal point.
* @param d The double to be converted
* @return A full string representation
*/
public static String fullDoubleToString(final double d) {
// treat 0 separately, it will cause problems on the below algorithm
if (d == 0) {
return "0.000000000000";
}
// find the number of digits above the decimal point
double testD = Math.abs(d);
int digitsBeforePoint = 0;
while (testD >= 1) {
// doesn't matter that this loses precision on the lower end
testD /= 10d;
++digitsBeforePoint;
}
// create the decimal digits
StringBuilder repr = new StringBuilder();
// 10^ exponent to determine divisor and current decimal place
int digitIndex = digitsBeforePoint;
double dabs = Math.abs(d);
while (digitIndex > 0) {
// Recieves digit at current power of ten (= place in decimal number)
long digit = (long)Math.floor(dabs / Math.pow(10, digitIndex-1)) % 10;
repr.append(digit);
--digitIndex;
}
// insert decimal point
if (digitIndex == 0) {
repr.append(".");
}
// remove any parts above the decimal point, they create accuracy problems
long digit = 0;
dabs -= (long)Math.floor(dabs);
// Because of inaccuracy, move to entirely new system of computing digits after decimal place.
while (digitIndex > -12) {
// Shift decimal point one step to the right
dabs *= 10d;
final var oldDigit = digit;
digit = (long)Math.floor(dabs) % 10;
repr.append(digit);
// This may avoid float inaccuracy at the very last decimal places.
// However, in practice, inaccuracy is still as high as even Java itself reports.
// dabs -= oldDigit * 10l;
--digitIndex;
}
return repr.insert(0, d < 0 ? "-" : "").toString();
}
请注意,虽然StringBuilder用于提高速度,但此方法可以轻松地重写为使用数组,因此也可以使用其他语言。