How to Resolve Error "CS1013: Invalid number" in C#
The Compiler Error CS1013 is a lexical analysis error. The message reads: "Invalid number".
This error occurs when the C# compiler encounters a numeric literal that violates the syntax rules for numbers. It recognizes that you are trying to write a number (because it starts with a digit, a decimal point, or a format specifier like 0x), but the characters following it do not form a valid value. This is often caused by incomplete hexadecimal values, broken scientific notation, or typos in decimal placement.
This guide explains the correct syntax for various numeric formats in C# and how to fix malformed literals.
Understanding Numeric Literal Syntax
C# supports several ways to write numbers:
- Decimal:
123,10.5 - Hexadecimal: Starts with
0x(e.g.,0xFF). - Binary: Starts with
0b(e.g.,0b1010). - Scientific: Uses
eorE(e.g.,1.5e2).
The error CS1013 implies the start of the number looked correct, but the ending was incomplete or contained invalid characters.
Scenario 1: Malformed Hexadecimal Literals
In C#, a hexadecimal number must start with 0x and be followed immediately by at least one valid hex digit (0-9, A-F). If you type 0x and stop, or follow it with a non-hex character (like G or a space), the number is invalid.
Example of error
Leaving the 0x prefix hanging without a value.
public class ColorConfig
{
// ⛔️ Error CS1013: Invalid number
// The compiler sees the prefix '0x', but finds a semicolon immediately after.
// It requires actual digits to form a number.
public int Red = 0x;
}
Solution: Complete the Literal
Provide the hexadecimal digits.
public class ColorConfig
{
// ✅ Correct: '0x0' is valid (Decimal 0)
public int Red = 0x0;
// ✅ Correct: '0xFF' is valid (Decimal 255)
public int Blue = 0xFF;
}
If you inadvertently type 0xG, you might get a different error (like "Syntax error" or "Identifier expected") depending on the context, but strictly empty prefixes trigger CS1013.
Scenario 2: Broken Scientific Notation
Scientific notation is used for floating-point literals. It requires three parts:
- The base number (e.g.,
1.5). - The exponent indicator (
eorE). - The exponent value (an integer, e.g.,
2or-5).
If you type the e but forget the exponent, the number is incomplete.
Example of error
public void CalculatePhysics()
{
// ⛔️ Error CS1013: Invalid number
// The 'e' indicates an exponent follows, but the statement ends.
double distinct = 1.5e;
// ⛔️ Error CS1013: Even with a sign, you need a number after it.
double distance = 4.2e+;
}
Solution: Add the Exponent
Specify the power of 10.
public void CalculatePhysics()
{
// ✅ Correct: 1.5 * 10^2 = 150.0
double distinct = 1.5e2;
// ✅ Correct: 4.2 * 10^5 = 420,000.0
double distance = 4.2e+5;
}
Scenario 3: Typographical Errors in Decimals
While C# allows numbers to start with a decimal point (e.g., .5), or end with one in some contexts (though 1. is usually valid as a double), typing double dots or accidental characters inside the number causes format errors.
Example of error
Accidentally typing two decimal points.
public class Product
{
// ⛔️ Error CS1013: Invalid number
// A number cannot have two decimal points.
public double Price = 10..99;
}
Solution: Fix the Format
Correct the typo to use standard decimal syntax.
public class Product
{
// ✅ Correct
public double Price = 10.99;
}
Conclusion
CS1013 is a strict syntax check on numeric literals.
- Check Hex: Does your number start with
0x? Ensure valid characters (0-9,A-F) follow it immediately. - Check Scientific: Does your number contain
e? Ensure an integer follows it. - Check Typos: Ensure you haven't double-typed a decimal point or inserted a letter into a decimal number.