我正在使用FileHelpers来创建NACHA文件.以下示例
许多属性都是带前导零的数字,因此它们已被定义为字符串.是否有一个属性可以填充Class属性中的前导零,类似于FieldTrim/TrimMode
删除空格的方式?
[FixedLengthRecord()]
public class FileControlRecord
{
[FieldFixedLength(1)]
public int RecordTypeCode = 9; //Constant
[FieldFixedLength(6)]
public string BatchCount; //Numeric
[FieldFixedLength(6)]
public string BlockCount; //Numeric
[FieldFixedLength(8)]
public string EntryAddendaCount; //Numeric
[FieldFixedLength(10)]
public string EntryHash; //Numeric
[FieldFixedLength(12)]
public string TotalDebit; //$$$$$$$$$$cc
[FieldFixedLength(12)]
public string TotalCredit; //$$$$$$$$$$cc
[FieldFixedLength(39)]
[FieldNotInFile]
public string RESERVED; //Blank
}
Run Code Online (Sandbox Code Playgroud) 我试图通过proc import(SAS)将数字从csv文件导入sas数据集,但导入后我的所有前导零都消失了.
例如,
'0123456'导入后我只会得到'123456'
我只是想用C编写一个简约程序来计算某个自然数的位数之和(数字之和定义如下:sumOfDigits(123)= 6,sumOfDigits(0)= 0,sumOfDigits(32013)= 9 , 等等).
到目前为止,使用以下代码片段一切正常.例如,对于5100,它正确地提供6.但是,为什么14为05100交付(记得领先的0)?
这里发生了什么?
我查看了数字的二进制表示,但这并没有给我任何信息.(顺便说一句:我想,以下代码应该在任何地方运行.)
#include <stdio.h>
unsigned int sumOfDigits(unsigned int n) {
int retval = 0;
while (n > 0) {
retval += n % 10;
n/=10;
}
return retval;
}
int main() {
printf("OK: %u\n", sumOfDigits(5100u));
printf("WTF: %u", sumOfDigits(05100u));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如Zaibis所说......领先的0表示八进制表示法.:-)所以:5100_8 == 2624_10
我需要有条件地添加前导或尾随零的帮助.
我有一个数据框,其中一列包含icd9诊断.作为向量,列看起来像:
"33.27" "38.45" "9.25" "4.15" "38.45" "39.9" "84.1" "41.5" "50.3"
Run Code Online (Sandbox Code Playgroud)
我需要所有值的长度为5,包括中间的时间段(不计算"").如果值在周期之前有一位数,则需要具有前导零.如果值在句点之后有一位数,则最后需要为零.所以结果应该是这样的:
"33.27" "38.45" "09.25" "04.15" "38.45" "39.90" "84.10" "41.50" "50.30"
Run Code Online (Sandbox Code Playgroud)
这是R的向量:
icd9 <- c("33.27", "38.45", "9.25", "4.15", "38.45", "39.9", "84.1", "41.5", "50.3" )
Run Code Online (Sandbox Code Playgroud) 我曾尝试在网上查找此内容,但找不到与我的情况相符的任何内容。我需要抑制输出中的前导零,但无法正常工作。我需要压制的数字是 PR-PAY-RATE。
******************************************************************
ID DIVISION.
PROGRAM-ID. LAB5
AUTHOR. asdf.
DATE-WRITTEN. March 25, 2014.
DATE-COMPILED. CURRENT-DATE.
******************************************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PAYROLL-FILE ASSIGN TO PAYIN
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD PAYROLL-FILE.
**** Payroll Record Length 360 characters ************************
01 PAYROLL-RECORD.
05 PR-EMPLOYEE-ID PIC X(07).
05 PR-LAST-NAME PIC X(26).
05 PR-FIRST-NAME PIC X(15).
05 PR-DIVISION PIC X(10).
05 PR-GROUP PIC X(10).
05 PR-DEPARTMENT PIC X(10).
05 PR-TITLE PIC X(20).
05 PR-ADDRESS1 PIC X(30).
05 PR-ADDRESS2 PIC X(30). …
Run Code Online (Sandbox Code Playgroud) Java的ParseInt方法将很乐意解析前导零提供的十进制值,而不会抛出异常,剥离零:
int value = Integer.parseInt("050", 10);
Run Code Online (Sandbox Code Playgroud)
将导致整数值50.
但是,我有一个应用程序需要这样的字符串作为无效输入被拒绝.到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较原始/解析字符串的长度,以查看是否已剥离任何字符,例如:
String original = "050";
value = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但感觉有点hacky.是否有更好的方法来检测和处理前导零?
我需要使用两列的信息来构建数字,如下所示:
-4 24296 -4.24296
-4 20320 -4.20320
-4 16356 -4.16356
-4 12410 -4.12410
-4 08500 -4.08500
-4 04619 -4.04619
-4 00739 -4.00739
这是我用来合并值的例程:
Range("R3").Select
Do While ActiveCell <> ""
ActiveCell.Offset(0, 1).FormulaR1C1 = _
ActiveCell.Offset(0, -1) & "." & ActiveCell.Offset(0, 0)
ActiveCell.Offset(1, 0).Select
Loop
Run Code Online (Sandbox Code Playgroud)
问题是这个例程忽略了前导零,即使我让程序显示它们:
Worksheets("Data").Columns("R").NumberFormat = "00000"
Run Code Online (Sandbox Code Playgroud)
这是我的程序给我的输出:
-4 24296 -4.24296
-4 20320 -4.20320
-4 16356 -4.16356
-4 12410 -4.12410
-4 08500 -4.85000
-4 04619 -4.46190
-4 00739 -4.73900
(最后三行错了)
谁能帮我解决这个问题?
谢谢,
大多数clz()
(软件实现)都针对 32 位无符号整数进行了优化。
如何有效地计算 24 位无符号整数中的前导零?
UPD。目标的特点:
CHAR_BIT 24
sizeof(int) 1
sizeof(long int) 2
sizeof(long long int) 3
Run Code Online (Sandbox Code Playgroud) 我有一个包含一Reference
列的数据框。这是一个10位数字,可以从零开始。导入R时,前导零消失,我想重新添加。
我尝试使用sprintf
和formatC
,但是每个都有不同的问题。
DF=data.frame(Reference=c(102030405,2567894562,235648759), Data=c(10,20,30))
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下:
> sprintf('%010d', DF$Reference)
[1] "0102030405" " NA" "0235648759"
Warning message:
In sprintf("%010d", DF$Reference) : NAs introduced by coercion
> formatC(DF$Reference, width=10, flag="0")
[1] "001.02e+08" "02.568e+09" "02.356e+08"
Run Code Online (Sandbox Code Playgroud)
当数字已经有10位数字时,第一个输出给出NA,第二个输出以标准格式存储结果。
我需要的是:
[1] 0102030405 2567894562 0235648759
Run Code Online (Sandbox Code Playgroud)