- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 double 型放入文本编辑对象中?我想在屏幕上包含尽可能多的数字,而不排除科学记数法和四舍五入。例如:
1000900E13 --> 10009E13
1000090E13 --> 10001E13
1000009E13 --> 1E13
我意识到如果我能计算出适合文本编辑的字符数,我就能解决这个问题,但字符宽度是可变的。
编辑:好的,我现在已经实现了逻辑,但是当我点击界面上的等号时出现以下错误:
fatal signal 6 (SIGBART) at 0x000001b0 (code=0)
//This error happens when I call the function, and it not a bug inside the function itself
这是我计算器的按钮“=”
equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
double result;
result = evaluateString.evaluate(string);
string = formatDouble.fmt(result); //omits redundant zeros and decimal point
Typeface tface = disp.getTypeface();
float fsize = disp.getTextSize();
float field_width = disp.getWidth();
//this function is the problem
String show = fillScreen.getLength(fsize, tface, field_width, string);
disp.setText(show);
}
});
这是将 double 值填充到文本编辑器中的实现。
public class fillScreen {
//find proper length
public static String getLength(float fsize, Typeface tface, float field_width, String string) {
int len = 1;
Paint paint = new Paint();
Rect rect = new Rect();
MainActivity.disp.setText("error");
while (true) {
paint.setTypeface(tface);
paint.setTextSize(fsize);
paint.getTextBounds(string, 0, string.length(), rect);
if (rect.width() > field_width)
break;
len++;
}
len = len - 1;
String numbersigns="0.";
for (int i =0; i<len;i++){
numbersigns=numbersigns+"#";
}
numbersigns=numbersigns+"E0";
NumberFormat formatter = new DecimalFormat(numbersigns);
return (formatter.format(Double.parseDouble(string)));
}
}
6 除以 6 并按 uequals 后的堆栈轨迹
07-12 17:12:42.432: I/System.out(6500): string is : 6/6
07-12 17:12:42.436: I/System.out(6500): strings is : 6/6
07-12 17:12:42.436: I/System.out(6500): strings RVP : 66/
07-12 17:12:45.519: D/AudioHardware(154): AudioHardware pcm playback is going to standby.
07-12 17:12:45.519: V/AudioHardware(154): closeMixer_l() mMixerOpenCnt: 1
07-12 17:12:45.519: D/AudioHardware(154): closePcmOut_l() mPcmOpenCnt: 1
07-12 17:12:47.309: D/lights(432): set_light_buttons: color=0xff000000, tlc=0.
07-12 17:13:12.310: I/PowerManagerService(432): Going to sleep due to screen timeout...
07-12 17:13:13.064: D/dalvikvm(432): GC_FOR_ALLOC freed 2400K, 30% free 12448K/17712K, paused 126ms, total 131ms
07-12 17:13:13.067: D/SurfaceFlinger(149): Screen released, type=0 flinger=0x2a007478
07-12 17:13:13.174: I/WindowManager(432): Screenshot Window{4230d070 u0 com.example.test/com.example.test.MainActivity} was all black! mSurfaceLayer=21040 minLayer=21040 maxLayer=21040
07-12 17:13:13.240: D/AccelerometerListener(744): enable(false)
07-12 17:13:13.677: W/ActivityManager(432): Activity pause timeout for ActivityRecord{420b2be8 u0 com.example.test/.MainActivity}
07-12 17:13:18.144: W/ActivityManager(432): Sleep timeout! Sleeping now.
07-12 17:13:18.507: D/dalvikvm(432): GC_FOR_ALLOC freed 1165K, 25% free 13326K/17712K, paused 152ms, total 153ms
07-12 17:13:18.507: I/ActivityManager(432): Start proc com.cyanogenmod.lockclock for broadcast com.cyanogenmod.lockclock/.ClockWidgetProvider: pid=6753 uid=10029 gids={50029, 3003}
07-12 17:13:18.627: I/ActivityManager(432): Start proc com.andrew.apollo for broadcast com.andrew.apollo/.appwidgets.AppWidgetSmall: pid=6767 uid=10000 gids={50000, 1015, 3003, 1028}
07-12 17:13:18.901: I/ActivityManager(432): No longer want net.cactii.flash2 (pid 6395): empty #17
07-12 17:13:18.937: I/ActivityManager(432): Start proc com.google.android.gsf.login for service com.google.android.gsf.login/com.google.android.gsf.loginservice.GoogleLoginService: pid=6781 uid=10052 gids={50052, 3003, 1007, 1028, 1015, 1006, 3002, 3001, 2001, 3006}
07-12 17:13:18.947: V/KeyguardHostView(432): hide transport, gen:3
07-12 17:13:18.947: V/KeyguardHostView(432): music state changed: 0
07-12 17:13:19.117: D/PhoneStatusBar(583): disable: < EXPAND* icons alerts TICKER* system_info back home RECENT* clock search >
07-12 17:13:19.167: V/TAG(432): bug 7643792: fitSystemWindows([0,38][0,0])
07-12 17:13:19.214: D/PhoneStatusBar(583): disable: < EXPAND icons alerts TICKER system_info BACK* HOME* RECENT CLOCK* search >
07-12 17:13:19.377: I/ActivityManager(432): No longer want com.android.defcontainer (pid 6462): empty #17
07-12 17:13:19.674: I/ActivityManager(432): No longer want com.android.keychain (pid 6549): empty #17
07-12 17:13:23.678: W/ActivityManager(432): Activity stop timeout for ActivityRecord{420b2be8 u0 com.example.test/.MainActivity}
最佳答案
如果字体是成比例的(可变字符长度),则需要进行迭代:
1. Start with length 1
2. Calculate the width using Paint object and setTypeFace, setTextSize methods
3. Increase length, check if it still fits, if not the result is (length -1)
这里是您的代码的样子。您只需要编写自己的方法,将给定长度的数字作为字符串返回(请参阅下面的 getNumberAsString):
public int getLength(int fsize, Typeface tface, int field_width) {
int len = 1;
Paint paint = new Paint();
Rect rect = new Rect();
while (true) {
paint.setTypeface(tface);
paint.setTextSize(fsize);
String text = getNumberAsString(len);
paint.getTextBounds(text, 0, text.length(), rect);
if (rect.width() > field_width)
break;
len++;
}
return len - 1;
}
在您当前的实现中,“while”循环将永远不会结束,因为您没有更改“string”的大小。要解决此问题,您需要添加以下功能:
public String getNumberAsString(int len, String string) {
String numbersigns="0.";
for (int i =0; i<len;i++){
numbersigns=numbersigns+"#";
}
numbersigns=numbersigns+"E0";
NumberFormat formatter = new DecimalFormat(numbersigns);
return (formatter.format(Double.parseDouble(string)));
}
然后在您的“while”循环中使用它,如下所示:
cur_str = getNumberAsString(len, string);
paint.getTextBounds(cur_str, 0, cur_str.length(), rect);
我还找到了一个很好的解释,为什么在“while”循环之前调用的 setText('Error') 不起作用。下面的帖子中提供了详细说明。 setText 使 View 无效。因此, View 最终将被重新绘制,但不会在您当前的方法完成之前重新绘制。由于您使用“while”循环的方法永远不会结束,因此永远不会重新绘制 View 。 Android TextView.setText() invoked & returned before Thread.sleep() blocks until sleep() returns. Why?
关于android - 我怎样才能用科学记数法将 double 舍入到 TextView 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687304/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!